等待句柄/事件异步或回调在同一线程内
Wait for handle/event async or call back within the same thread
我用CreateEvent创建了一个全局事件,并且我使用OpenEvent在另一个应用程序中获得这个事件的句柄。
那么我希望做如下的事情:
(pesudo代码)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的线程。
这似乎是一个简单的问题,必须解决很多次?处理线程问题只是为了知道一个事件何时被发出信号,这是多余的。
编辑:最后我去使用QueueUserApc -但这意味着你的消息必须使用*Ex API把线程在一个可报警的状态。另一个问题是,你必须跟踪你的优秀APC,而不是破坏对象之前,他们已经服务了所有的APC。否则你会得到一个APC排队到一个销毁/删除的对象。
你对选择的分析是正确的。对于使用消息的选项2,您有两个选项来将通知引导到所需的线程。(a)对于非gui线程目的地使用PostThreadMessage。(b)对于GUI线程目的地,您可以将PostMessage或SendMessage发送到目的地HWND。创建HWND的线程接收该消息
这里- http://pastebin.com/ucpDdYGZ -是我的一个问题的决定。对不起,非英语评论(他们是俄语)。
主要思想是用 创建一个虚拟窗口。m_wnd = CreateWindowA( "STATIC", "", 0,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
HWND_MESSAGE, NULL, NULL, NULL);
并通过SendMessage
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- openmp 锁由同一线程重新获取,而另一个线程正在等待它
- 线程完成后在另一线程中调用方法