C# 使用互斥来跟踪另一个应用程序';生命周期

C# 使用互斥来跟踪另一个应用程序';生命周期,c#,c++,mutex,C#,C++,Mutex,MyApp1(C#)启动MyApp2(C#)。当MyApp2完全启动时,它将执行: new Mutex(true, "MyApp2IsRunning"); 与此同时,MyApp1一直在使用以下工具等待这种情况发生: Mutex myApp2Mutex = null; while (myApp2Mutex == null && !timedOut) { try { myApp2Mutex = Mutex.OpenExisting("MyApp2IsRunn

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


<>我只在C++中改写MyAP1。检测MyApp2状态的等效互斥相关代码是什么?因此,MyApp1仍将负责启动MyApp2,我仍然希望它检测MyApp2何时启动以及用户何时退出MyApp2。与上面相同的代码,但是在C++中,

< p>简单的谷歌搜索给你:


HANDLE mutex_you_want=CreateMutex(nullptr,true,“MyApp2IsRunning”)

此伪代码使MyApp1能够等待MyApp2启动,然后检测用户何时退出MyApp2:

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

太宽了。你可能想先在谷歌上搜索“互斥体IPC”。使用Windows API互斥体。@ChristianHackl这篇文章内容太广泛了怎么办?我不认为我能比提供我试图移植的确切代码更具体。我不是C++开发人员,所以谷歌搜索结果让我想知道STD::互斥和其他选项之间的区别。