我通过以下步骤创建一个系统级手动重置事件:
EventWaitHandle notifyEvent = new EventWaitHandle(false, EventResetMode.ManualReset, notifyEventName, out createdEvent);
多个流程都会引起此事件(例如它们之间是共享的)。它用于通知更新情况。
我想能够设置此事件,以便等待它的所有进程都被发出信号,然后立即重置它,以使对事件的后续等待被阻止。
如果我做一个
notifyEvent.Set();
notifyEvent.Reset();
有时它会通知所有正在监听的进程。
如果我做一个
notifyEvent.Set();
Thread.Sleep(0);
notifyEvent.Reset();
更多的进程会收到通知(我假设这会发生,因为调度程序有机会运行)。
如果我这样做
notifyEvent.Set();
Thread.Sleep(100);
notifyEvent.Reset();
然后一切似乎都运作良好,所有进程(例如~8)都得到了一致的通知。我不喜欢在睡眠调用中使用“魔数”。
有没有更好的方法通知其他进程中的所有监听器操作系统事件已发生,以便在通知时所有正在监听事件的人都会接收事件信号,然后立即重置事件,以便任何其他要监听事件的人都将被阻塞?
更新:由于事件监听器数量随时间变化,信号量似乎不适合此处。在需要通知事件时,提前不知道有多少个监听器。