在XCB事件循环中从线程触发到主线程
Trigger from thread to main thread in XCB Event Loop
有没有人对我如何得到我的主线程事件循环有任何想法,看起来像:
const int MY_CUST_MSG(877);
xcb_generic_event_t *event;
while (event = xcb_wait_for_event(connection)) {
switch (event->response_type & ~0x80) {
case MY_CUST_MSG:
// do something
break;
default:
// Unknown event type, ignore it
debug_log("Unknown event: ", event->response_type);
}
free(event);
}
响应来自次级线程的消息?
xcb_wait_for_event()
等待从服务器接收事件。您必须通过服务器向自己发送消息,但我建议使用另一种方法:
-
使用
xcb_file_descriptor()
获取X连接的底层文件描述符 -
设置一个内部管道,你的应用程序可以使用它在线程之间发送消息给自己。
-
使用
xcb_poll_for_event()
(xcb_wait_for_event()
的非阻塞版本)来实现非阻塞检查是否有事件已被读取,如果有,则读取它 -
在内部管道上执行非阻塞读取,以检查来自其他线程的任何内部消息
-
如果步骤3和步骤4都没有产生消息,使用
poll()
等待其中一个事件
您还需要使用xcb_flush()
手动刷新任何事件,并使用xcb_connection_has_error()
检查到X服务器的致命连接错误。
相关文章:
- 从不同线程使用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使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 在XCB事件循环中从线程触发到主线程