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 должен быть дольше, поэтому я хотел бы найти лучший ответ. Кто-нибудь сталкивался с этой проблемой? У кого-нибудь есть идеи о том, как я могу обойти это?

Ответы на вопрос(1)

Ваш ответ на вопрос