CYBOI の一部のコードを Xlib から XCB に移行しています。
CYBOI は、serial_port、ターミナル、ソケット、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」は役に立ちません。イベント検出は独自のスレッドで実行されるため、ブロッキングは問題ありません。3 番目の入力関数としての「xcb_request_check」は、私が望むものではないようです。
誰か助けてくれませんか?
ありがとう、クリスチャン