gtk文本缓冲区插入等待在文本缓冲区中打印,直到处理程序终止

gtk文本缓冲区插入等待在文本缓冲区中打印,直到处理程序终止,gtk,gtk3,Gtk,Gtk3,Im使用以下gtk+2.0 API: gtk_text_buffer_get_iter_at_offset(buffer,&iter,-1) gtk_text_buffer_insert(buffer,&iter,“text\n”,-1) 在按钮处理程序中,只有当相应的处理程序完成其终止时,缓冲区中的消息才会显示在GUI上,但我需要立即显示消息。 我在handler中有一些阻塞调用,直到这些调用被解除阻塞,handler被终止,GUI上才显示消息。通常,只有在主循环有机会处理小部件生成的事件之后

Im使用以下gtk+2.0 API:
gtk_text_buffer_get_iter_at_offset(buffer,&iter,-1)
gtk_text_buffer_insert(buffer,&iter,“text\n”,-1)
在按钮处理程序中,只有当相应的处理程序完成其终止时,缓冲区中的消息才会显示在GUI上,但我需要立即显示消息。

我在handler中有一些阻塞调用,直到这些调用被解除阻塞,handler被终止,GUI上才显示消息。

通常,只有在主循环有机会处理小部件生成的事件之后,小部件更新才可见。要强制立即处理事件,可以手动运行主循环所需的迭代,如下所示:

/* update the widget */
...

/* force refresh */
while (gtk_events_pending())
  gtk_main_iteration();
这是一种非常常见的方法,通常用于需要立即更新的小部件,例如进度条。这种模式有一个缺点,尽管GTK主循环的运行迭代也将处理输入事件,甚至是处理原始单击的同一个按钮的单击

如果您经常需要在完成处理程序之前运行主循环,则可能未正确实现事件驱动代码。理想情况下,处理程序中不应该有阻塞调用,如果有必要,它们应该在专用线程中运行