有没有人对如何获得主线程事件循环有任何想法,如下所示:
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);
}
要对来自辅助线程的消息做出反应吗?
答案 0 :(得分:1)
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服务器是否存在致命连接错误。
See the tutorial了解更多信息。