我正在將一些代碼從Xlib遷移到XCB。需要XEB中的XEventsQueued(顯示,QueuedAfterReading)
CYBO關於如何使用不同的通信通道,如: serial_port,terminal,socket,x_window_system。但是,它僅將這些線程用於信號/事件/數據檢測; 實際的收發是在主線程中完成的, 爲了避免任何地址空間的多線程衝突。
對於X_WINDOW_SYSTEM信道,我先前detected events在一個線程:
int n = XEventsQueued(display, QueuedAfterReading);
在檢測到事件時,一個「中斷標誌」被設置。 之後,主線程是reading the actual event使用:
XNextEvent(display, &event);
當沒有更多的事件是可用的,主線程停止接收事件 和X_WINDOW_SYSTEM通道線開始XEventsQueued再次聆聽。
現在,我將代碼遷移到X C Binding(XCB)。 有一個阻塞函數「xcb_wait_for_event」,可以很好地讀取事件。 如果有事件未決,我錯過了一些「窺視前方」的功能, 沒有實際返回/從隊列中移除事件。
我在網上閱讀了幾個小時,但無法找到這樣的功能。 「xcb_poll_for_event」不起作用。因爲我的事件檢測運行在它自己的線程中,所以阻止對我來說很好, 。 作爲第三個輸入函數的「xcb_request_check」似乎不是我想要的。
有人能幫我嗎?
感謝, 基督教
啊,我用的API文檔:這是版本1.2 XCB(很舊)的http://xcb.freedesktop.org/manual/index.html,但現在新發現XCB 1.9的。是的,xcb_poll_for_queued_event函數聽起來很有前途。將在接下來的幾天內試用...... –