4

我正在尝试执行以下操作:

进程 A 应该使用 OpenMutex 来查看进程 B 是否正在运行。

进程 B 应该使用 CreateMutex 让进程 A 知道它正在运行。其实很简单...

会发生什么:

  1. 运行进程 A -> 它看到进程 B 没有运行。到现在为止还挺好。
  2. 运行进程 B -> 它创建互斥体。
  3. 再次运行进程 A -> 它看到进程 B 现在正在运行。还好。
  4. 我关闭了进程 B(它也应该关闭互斥锁)。
  5. 运行进程 A -> 它仍然看到进程 B 正在运行!(OpenMutex 不会失败)。

我在这里做错了什么?

这是我的代码的一部分:

// Start of process B
HANDLE hMutex = ::CreateMutex(NULL, TRUE, MY_MUTEX_NAME);
MessageBox(NULL, _T("PROCESS B !"), _T("TEST"), 0); 
CloseHandle(hMutex);
// End of process B


// Start of process A
HANDLE hMutex = ::OpenMutex(SYNCHRONIZE, FALSE, MY_MUTEX_NAME);
if(hMutex != NULL)
{
   MessageBox(NULL, _T("PROCESS B is alive !"), _T("TEST"), 0); 
}
CloseHandle(hMutex);
// End of process A
4

1 回答 1

5

调用 OpenMutex 后,必须关闭进程 A 中的互斥锁,以释放互斥锁的引用计数,以便系统将其删除。请参考MSDN。“互斥对象在其最后一个句柄关闭时被销毁。”

这里有一个工作示例

于 2012-06-28T12:33:39.193 回答