gtk_events_pending () возвращает FALSE с ожидающими событиями
Я работаю над приложением, в котором есть кнопки запуска и остановки. Эти кнопки блокируют пользовательский интерфейс, и по разным причинам я не могу создать поток.
Я показываю рабочий экран при нажатии этих кнопок, используя:
while (gtk_events_pending()) gtk_main_iteration();
это гарантирует, что рабочий экран загружается до начала операций запуска / остановки.
Я недавно обновился до GTK + 3.8.6, и кажется, чтоgtk_events_pending()
сейчас сломан. Теперь иногда окно показывает, но изображения в окне нет. Иногда окно даже не отображается.
Рассматриваемая функция выглядит так:
gtk_widget_show(working_screen);
while (gtk_events_pending()) gtk_main_iteration();
long_running_blocking_function();
Если я сделаю что-то вроде:
int busy_wait = 0;
gtk_widget_show(working_screen);
while (gtk_events_pending() || busy_wait < 5)
{
gtk_main_iteration();
if (!gtk_events_pending()) ++busy_wait;
}
long_running_blocking_function();
... это работает отлично. Тем не менее, я знаю, что это только вопрос времени, когда busy_wait должен быть дольше, поэтому я хотел бы найти лучший ответ. Кто-нибудь сталкивался с этой проблемой? У кого-нибудь есть идеи о том, как я могу обойти это?