gtk_events_pending () retorna FALSE com eventos ainda pendentes
Estou trabalhando em um aplicativo que possui um botão iniciar e parar. Esses botões bloqueiam a interface do usuário e, por vários motivos, não consigo gerar um thread.
Eu tenho mostrado uma tela de trabalho quando esses botões são pressionados, usando:
while (gtk_events_pending()) gtk_main_iteration();
o que garante que a tela de trabalho seja carregada antes do início / início das operações.
Atualizei recentemente para o GTK + 3.8.6 e parece quegtk_events_pending()
agora está quebrado. Agora, às vezes a janela aparece, mas a imagem na janela não está lá. Às vezes a janela nem aparece.
A função em questão se parece com:
gtk_widget_show(working_screen);
while (gtk_events_pending()) gtk_main_iteration();
long_running_blocking_function();
Se eu fizer algo como:
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();
...Funciona bem. No entanto, eu sei que é apenas uma questão de tempo até que o busy_wait precise ser mais longo, então eu gostaria de encontrar uma resposta melhor. Alguém já experimentou esse problema? Alguém tem alguma idéia de como eu posso resolver isso?