我正在使用单个线程实现Reactor
设计模式,以便使用Windows事件机制进行异步操作。
我在尝试将我的reactor与支持Windows Notifications
(WM_CLOSE,WM_CREATE,WM_DEVICECHANGE ...)以及现有Windows Events
组合时遇到了问题。
因此,我的问题是: 当特定窗口收到特定通知时,是否可以发出事件信号?
提前致谢。
答案 0 :(得分:1)
不,当收到特定的窗口消息时,您无法使Windows信号成为事件对象。您必须首先捕获消息循环中的消息,然后根据需要自己发出事件对象的信号。
否则,重新编写消息循环以使用MsgWaitForMultipleObjects()
,这样它可以同时检查事件信号和挂起的窗口消息,然后您可以根据每个循环迭代中满足等待的任何一个进行操作。请注意这个问题:
MsgWaitForMultipleObjects is a very tricky API
如果您将bWaitAll指定为true,则可能会发现您的应用程序在您预期的时候没有唤醒
在这种情况下,您可以将bWaitAll
设置为false,一切正常。