在不同的进程中创建和打开事件

Create and open event in different process

我正在尝试使用事件同步两个进程。

在第一个进程中,我创建一个事件,打开第二个进程,执行一些操作,发出事件信号并等待第二个进程。第二个进程尝试打开创建的事件并等待信号,但在打开过程中,我收到错误代码 2 = 未找到。

第一个过程:

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 调用之后即可。

这样,您的第二个进程将在第一个进程关闭事件之前打开该事件。

如果不这样做,第一个进程可能会在第二个进程打开事件之前关闭该事件,系统将销毁该事件,因为它不再有打开的句柄。第二个进程将报告该事件不存在。

此外,您的第一个进程可以使用 INFINITE 而不是 60 秒。