CMutexの仕様方法を教えてください。

[戻る]
HAITA 2002/04/25(木) 19:54:09
今回初めて投稿させていただきます。
環境はWin2000、VC++6.0です。
VC++で排他制御をしたいと思っているのですが、可能でしょうか?
MSDN調べていたところCMutexがあったのですが、これは排他をかけるものかと
思いまして投稿させていただきました。
CMutexには引数が3つあるかと思いますが、何を渡したらよいか分かりません。
何方かサンプル若しくはご存知の方がいましたら教えていただけませんでしょうか?

職業婦人 2002/04/25(木) 21:32:24
一口に排他制御といわれても
2重起動の防止ですか?編集中のファイルの保護ですか?
MSDNにサンプルがあるじゃないですか。
googleでの検索結果
CMutex785件 ミューテクス57件 ミューテックス642件

HAITA 2002/04/25(木) 22:20:56
CMutex mutex(FALSE, m_pszExeName);
if( mutex.Lock(0) == TRUE ) {
mutex.Unlock();
        }

HAITA 2002/04/25(木) 22:20:56
CMutex mutex(FALSE, m_pszExeName);
if( mutex.Lock(0) == TRUE ) {
mutex.Unlock();
        }

HAITA 2002/04/25(木) 22:26:28
間違えて2重送信をしてしまいました。すみません。
排他制御はアプリケーションの2重起動防止です。
以下の用な処理をしているのですが上手くいかないのが現状です。
BOOL C?????App::InitInstance()
{
    CMutex mutex(FALSE, m_pszExeName);
    if( mutex.Lock(0) == TRUE ) {
        mutex.Unlock();
    }

    return FALSE;
}

起動するとUnlock処理に走ってしまいます。
間違っていましたら教えてください。

職業婦人 2002/04/25(木) 22:46:52
2重起動の防止なら過去ログを参照してください。
CMutexを使用しなくても2行で実現できます。

dairygoods 2002/04/26(金) 09:54:28
>    if( mutex.Lock(0) == TRUE ) {
>        mutex.Unlock();
>    }

うまく施錠できたとたんにそれを解除しているのですから、
鍵はいつも開けっ放しですよね。

HAITA 2002/04/26(金) 10:42:10
[[解決]]
二重起動防止が出来ました。ありがとうございました。
職業婦人さん言う2行では出来ませんでしたが、以下のようにしましたら出来ました。

HANDLE hMutex;
hMutex = CreateMutex(NULL, TRUE, "test");
if (!hMutex)
    return FALSE;
if (GetLastError() == ERROR_ALREADY_EXISTS)
    return FALSE;

ありがとうございました。

古いスレッドには追加発言できません。