使用 Mutex 跟踪另一个应用程序的生命周期
Using Mutex to track another app's lifetime
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++ 重写 MyApp1。检测 MyApp2 状态的等效互斥相关代码是什么?所以 MyApp1 仍将负责启动 MyApp2,我仍然希望它检测 MyApp2 何时启动以及用户何时退出 MyApp2。与上面相同的代码,但使用 C++。
一个简单的 google 搜索给你:
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);
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++ 重写 MyApp1。检测 MyApp2 状态的等效互斥相关代码是什么?所以 MyApp1 仍将负责启动 MyApp2,我仍然希望它检测 MyApp2 何时启动以及用户何时退出 MyApp2。与上面相同的代码,但使用 C++。
一个简单的 google 搜索给你:
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);