У меня есть программа, которая имеет следующую основную структуру:XPending Функция блокирует
while(true)
{
// get any X11 events
while(XPending(display) > 0)
{
// get an event using XNextEvent and do stuff with it
}
// draw to the display
}
Программа рендеринга OpenGL сцены. Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю и начинаю перетаскивать окно, вызов XPending
вызывает блокировки до тех пор, пока я не закончу последовательность перетаскивания, таким образом остановив любую анимацию, которая была в процессе. Я могу решить это решение, добавив еще один поток Expose
событий и, таким образом, пробуждая вызов XPending
, но в идеале я хотел бы иметь функцию X, которая проверяет события, но не блокирует вообще.
Спасибо. Оказывается, моя проблема состояла в том, что мой код «рисовать на дисплей» находился внутри цикла «XPending» while вместо внешнего, как показано выше. Перемещение его за пределы цикла заставляет все работать правильно, поэтому кажется, что «XPending» на самом деле не блокировалось, как я думал. – pauld