在不同的进程中创建和打开事件
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 秒。
我正在尝试使用事件同步两个进程。
在第一个进程中,我创建一个事件,打开第二个进程,执行一些操作,发出事件信号并等待第二个进程。第二个进程尝试打开创建的事件并等待信号,但在打开过程中,我收到错误代码 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 秒。