我正在将一些 CYBOI 代码从 Xlib 迁移到 XCB。
CYBOI 使用几个线程用于不同的通信通道,例如:serial_port、terminal、socket、x_window_system。但是,它仅将这些线程用于信号/事件/数据检测;实际的接收和发送在主线程中完成,以避免地址空间的任何多线程冲突。
对于 x_window_system 通道,我之前在线程中检测到事件:
int n = XEventsQueued(display, QueuedAfterReading);
检测到事件后,设置了“中断标志”。之后,主线程正在使用以下命令读取实际事件:
XNextEvent(display, &event);
当没有更多事件可用时,主线程停止接收事件,x_window_system 通道线程再次开始使用 XEventsQueued 进行侦听。
现在,我将代码迁移到 XC Binding (XCB)。有一个阻塞函数“xcb_wait_for_event”,可以很好地读取事件。如果有未决的事件,我想念的是一些“向前看”的功能,而实际上没有从队列中返回/删除事件。
我现在在网上阅读了几个小时,但找不到这样的功能。“xcb_poll_for_event”没有帮助。阻塞对我来说很好,因为我的事件检测在它自己的线程中运行。作为第三个输入函数的“xcb_request_check”似乎不是我想要的。
有人可以帮帮我吗?
谢谢,克里斯蒂安