我有一个使用 CreateEvent 创建的全局事件,并且我在另一个使用 OpenEvent 的应用程序中获得了该事件的句柄。
然后我想做类似的事情:
(伪代码)
register_event_change_notification(my_call_back);
void my_call_back()
{
// do work
}
其中 my_call_back 在调用 register_event_change_notification 的同一线程上执行。但是我的问题是我找不到任何允许这样做的 API。看来您只有以下选项:
创建一个使用 WaitForSingleObject 的线程,然后调用 my_call_back 并在所有内容周围放置关键部分。
创建一个使用 WaitForSingleObject 的线程并使用消息循环阻塞主线程,然后在 WaitForSingleObject 发布事件以在与消息循环相同的线程中执行 my_call_back - 这可能与调用 register_event_change_notification 的线程不同。
这似乎是一个必须多次解决的简单问题?必须处理线程问题只是为了知道何时向 IMO 发出事件信号,这有点矫枉过正。
编辑:
最后我选择了使用 QueueUserApc - 但这意味着您的消息放置必须使用 *Ex API 将线程置于可警报状态。另一个问题是您必须跟踪未完成的 APC,并且在对象为所有 APC 提供服务之前不要破坏它们。否则你会得到一个 APC 排队到一个被破坏/删除的对象。