c – CreateMutex,OpenMutex和Process sync

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

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

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

这是怎么回事:

>运行流程A – >它看到进程B没有运行.到现在为止还挺好.
>运行流程B – >它创建了互斥锁.
>再次运行流程A – >它看到进程B正在运行.还好.
>我关闭进程B(也应关闭互斥锁).
>运行流程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
最佳答案
在调用OpenMutex以释放互斥锁的引用计数后,必须在进程A中关闭互斥锁,以便系统可以删除它.请参考MSDN.“当最后一个句柄关闭时,互斥对象将被销毁.”

有一个工作示例here

转载注明原文:c – CreateMutex,OpenMutex和Process sync - 代码日志