【发布时间】:2015-03-28 14:50:52
【问题描述】:
我正在尝试使用事件同步两个进程。
在第一个进程中,我创建一个事件,打开第二个进程,做一些操作,发出事件信号并等待第二个进程。第二个进程尝试打开创建的事件并等待信号,但是在打开的进程中,我收到错误代码 2 = not found。
第一道工序:
hEvent = CreateEvent(NULL, FALSE, FALSE, L"MyEvent");
if (NULL == hEvent)
{
__leave;
}
if(!CreateProcess(procPath, args, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
{
__leave;
}
// Some minor changes
SetEvent(hEvent);
if (hEvent != NULL)
{
CloseHandle(hEvent);
}
WaitForSingleObject( pi.hProcess, 60000); // wait 60 seconds
第二道工序:
hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, L"MyEvent");
if (NULL == hEvent)
{
LOG_ERROR(L"[%d] OpenEvent MyEvent\n", GetLastError());
return;
}
WaitForSingleObject(hEvent, 10000);
【问题讨论】:
-
你不能这样调用 CloseHandle() ,子进程永远没有机会看到它。在 WaitForSingleObject() 调用之后移动它是显而易见且正确的解决方案。尽管 60 秒也是盲目猜测。