C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Mutexを使った二重起動チェックについて


(過去ログ 91 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■54186 / inTopicNo.1)  Mutexを使った二重起動チェックについて
  
□投稿者/ Kane (1回)-(2010/10/08(Fri) 11:36:17)

分類:[C#] 

開発環境:Windows XP Professonal Version 2002 SP3
使用言語:VS2005 C#

以下のようにして、mutexを使用した二重起動チェックを行いますが、

private static Mutex hMutex;

public static bool IsStart(string mutexName)
{
// Mutexインスタンス生成
hMutex = new Mutex(false, mutexName);

// Mutex のシグナルを受信できるかどうか判断
if (!hMutex.WaitOne(0, false))
{
// Mutexクローズ
hMutex.Close();

return false;
}

return true;
}

二重起動であれば、IsStart は false を返しますが、
アプリによっては、二重起動であるにもかかわらず、
IsStart は true を返すのがあります。

二重起動であるにもかかわらず、IsStart が true を返す
原因について教えていただけませんでしょうか?

引用返信 編集キー/
■54194 / inTopicNo.2)  Re[1]: Mutexを使った二重起動チェックについて
□投稿者/ とっちゃん (549回)-(2010/10/08(Fri) 13:57:25)
とっちゃん さんの Web サイト
No54186 (Kane さん) に返信
> 二重起動であれば、IsStart は false を返しますが、
> アプリによっては、二重起動であるにもかかわらず、
> IsStart は true を返すのがあります。
>
このソースだと、だれもMutexのオーナーになっていないため、
WaitOneの戻り値が安定しません。

2個目以降であることを確実に安定化させるには
bool createdNew;
hMutex = new Mutex( true, mutexName, out createdNew );
if( createdNew == false ){
hMutex.Close();
hMutex = null;
}
return createdNew;
として、Mutex自身が新規作成かどうかをチェックしてください。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -