2017-11-19 15 views
-2

MyApp1(C#)がMyApp2(C#)を起動します。 MyApp2が完全にアップすると、それが実行されます。これは使用して発生するためミューテックスを使用して別のアプリのライフタイムを追跡する

new Mutex(true, "MyApp2IsRunning"); 

はまた、MyApp1が待機していた:

Mutex myApp2Mutex = null; 
while (myApp2Mutex == null && !timedOut) 
{ 
    try 
    { 
     myApp2Mutex = Mutex.OpenExisting("MyApp2IsRunning"); 
    } 
    catch(WaitHandleCannotBeOpenedException) 
    { 
     Thread.Sleep(100); 
    } 
} 
if (timedout) {return error;} 
myApp2Mutex.WaitOne(); 

MyApp2が割り当てられた時間内に起動するのであれば、MyApp1は今MyApp2IsRunningで待機しますユーザーがいつMyApp2を終了したかを知るミューテックス。

私はMyApp1のみをC++で書き直しています。 MyApp2のステータスを検出するための同等のMutex関連コードは何ですか?だから、MyApp1はMyApp2を起動する責任がありますが、MyApp2が起動しているときとMyApp2を終了したときを検出する必要があります。上記と同じコードですが、C++では同じです。

+0

広すぎます。おそらく、最初に「mutex IPC」を検索するGoogleをいくつか実行したいと思うかもしれません。 –

+0

Windows APIのmutexを使用します。 – MicroVirus

+0

@ChristianHackl投稿は広すぎますか?私は、私が移植しようとしている正確なコードを提供するよりも具体的ではないと思う。私はC++の開発者ではないので、Googleの検索結果はstd :: mutexと他のオプションの違いについて不思議に思いました。 –

答えて

0

この擬似コードが起動し、ユーザーがMyApp2を終了したときに検出するMyApp2を待つMyApp1を可能にします:

HANDLE hMutex = nullptr; 
while (hMutex == nullptr && !timedout) 
{ 
    hMutex = OpenMutex(
     SYNCHRONIZE, 
     FALSE, 
     "MyApp2IsRunning"); 
    Sleep(1000); 
} 
if (timedout){return error;} 
DWORD wait_result = WaitForSingleObject(hMutex, INFINITE); 
0

シンプルなGoogle検索であなたを与える:

HANDLEのmutex_you_want = CreateMutex(nullptr、真、 "MyApp2IsRunning");

+0

App1を作成すると、mutexはApp2が起動して準備ができていることを検出できません。 –

関連する問題