Я работаю над приложением X11 и пытаюсь написать функцию, которая будет обрабатывать любые события, которые в данный момент находятся в очереди, а затем возвращаться без блокировки.
Все найденные мной учебники по Xlib используют XNextEvent в вечном цикле, который блокирует каждый вызов XNextEvent, пока событие не будет готово.
Я посмотрел на XEventsQueued с QueuedAlready, который, кажется, должен возвращать число событий, готовых к обработке, но он всегда возвращает 0, даже когда я знаю, что есть события, которые можно извлечь с помощью XNextEvent.
Я что-то здесь упускаю или есть другой способ определить, есть ли в очереди доступные события?
Что ж, похоже, если вы просто вызовете XEventsQueued с QueuedAlready, события никогда не будут считываться из соединения и помещаться в очередь. Вызов XEventsQueued с QueuedAfterFlush очистит буфер вывода и затем прочитает все события, доступные для соединения, в очередь событий. XPending делает то же самое. QueuedAfterFlush или XPending — это то, что мне нужно.
Других решений пока нет …