我有两个进程,一个使用C#创建,另一个使用本机C++创建。跨进程同步在托管进程中使用EventWaitHandle,在非托管进程中使用WaitForSingleObject
我想同步这两个进程,以便非托管人将被阻塞,直到托管人启动并运行。
在管理过程中,我有以下代码:
// signal the unmanaged process that I am up and running
EventWaitHandle eventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, "MyEventName");
eventWaitHandle.Set();
在非托管过程中,我有相应的代码,以等待事件
HANDLE hWaitEvent = CreateEventW(NULL, TRUE, FALSE, "MyEventName");
if (hWaitEvent)
{
// wait for managed process to signal that it is up and running
WaitForSingleObject(hWaitEvent, 5000);
}
据我所知,后该事件在第一个过程中设置。另一个进程中的WaitForSingleObject无法检测到,并且一直等到超时。
有什么我错过了吗?谢谢。
谢谢。现在我使用HANDLE hWaitEvent = OpenEventW(NULL,TRUE,eventName);开启活动。但是hWaitEvent为null。我是否需要指定第一个参数而不是NULL? – sean717
使用GetLastError()。你的论点很随意,你需要询问SYNCHRONIZE访问权限。如果这两个进程在不同的会话中(如服务),那么您需要在事件名称前添加“Global \”。 –