gtk_events_pending () zwraca FALSE, gdy zdarzenia są nadal w toku

Pracuję nad aplikacją, która ma przycisk start i stop. Przyciski te blokują interfejs użytkownika iz różnych powodów nie mogę utworzyć wątku.

Pokazałem ekran roboczy po naciśnięciu tych przycisków, używając:

while (gtk_events_pending()) gtk_main_iteration();

co zapewnia, że ​​ekran roboczy jest ładowany przed rozpoczęciem operacji start / stop.

Ostatnio zaktualizowałem do wersji GTK + 3.8.6 i wydaje się, że takgtk_events_pending() jest teraz zepsuty. Czasami pojawia się okno, ale obrazu w oknie nie ma. Czasami okno nawet się nie pokazuje.

Ta funkcja wygląda następująco:

gtk_widget_show(working_screen);
while (gtk_events_pending()) gtk_main_iteration();

long_running_blocking_function();

Jeśli zrobię coś takiego:

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();

...to działa dobrze. Wiem jednak, że to tylko kwestia czasu, aż ruchliwie oczekujący będzie musiał być dłuższy, więc chciałbym znaleźć lepszą odpowiedź. Czy ktoś doświadczył tego problemu? Czy ktoś ma jakieś pomysły na to, jak mogę to obejść?

questionAnswers(1)

yourAnswerToTheQuestion