У меня есть программа, которая имеет следующую основную структуру:XPeekEvent Функция блокировки
while(true)
{
if(event.type==EVENT_KEY_RELEASE || event.type==EVENT_KEY_PRESS){
XEvent xev;
XPeekEvent(display, &xev);
if (XFilterEvent(&xev, G.win)) { printf("XFilterEvent: true\r\n"); }
else
{
if(xev.type == KeyRelease || xev.type == KeyPress)
// Get keyboard character
}
}
Проблема, которую я имею что когда я нажать и отпустить клавишу клавиатуры, он блокирует очереди событий до я нажимаю другую клавишу (или любое другое событие, такое как движение мыши и ...), в идеале я хотел бы иметь функцию X, которая проверяет события, но не блокирует вообще?
UPDATE: Я изменил мою программу и удалить infimit петли, вместо того, что я пытаюсь сделать это в протекторе таймера и я называю эту часть каждые 30 миллисекунд, но у меня возникли проблемы еще.
Что делает вас уверенным, что очередь событий не пуста, когда вы вызываете 'XPeekEvent'? Если он * пуст, тогда 'XPeekEvent' будет блокироваться до тех пор, пока событие не станет доступным. –
Если вы хотите, чтобы неблокируемое «есть событие типа y в очереди», обратитесь к 'XCheckTypedEvent'. Тем не менее, я вижу, что в ограниченном коде, который вы предоставили, вы, кажется, сражаетесь * против * X, а не с помощью * его (это означает, что вы должны пересмотреть свой подход и рассказать нам, что вы действительно хотите сделать) – tofro