3
我在执行以下操作:CreateMutex,OpenMutex和进程同步
进程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
是,但如果它创建互斥体(B在我的例子)退出或被杀害的过程是不应该的互斥体被释放? – Shaish
MSDN文档说:“使用CloseHandle函数关闭句柄,系统在进程终止时自动关闭句柄,当最后一个句柄关闭时,互斥对象被销毁。”所以,当进程终止时,句柄关闭,但不是对象......这仍然是... – PermanentGuest
和进程B呢?你需要那里的亲密句柄(自然而然)......我写了关于A的原因,因为那是很容易错过的地方。 – PermanentGuest