queue_draw正如您所建议的那样使用(实际上是为每个小部件定义的)是异步执行它的正确方法.该文件明确指出这一点:
不推荐使用gtk_widget_draw,不应在新编写的代码中使用.
在GTK + 1.2中,此函数将通过调用窗口小部件的虚拟绘制方法立即呈现窗口小部件的区域区域.在GTK + 2.0中,draw方法消失了,而gtk_widget_draw()只是使窗口小部件的指定区域无效,然后立即更新窗口小部件的无效区域.通常您不希望出于性能原因立即更新区域,因此一般来说,如果要绘制窗口小部件的区域,gtk_widget_queue_draw_area()是更好的选择.
如果您担心绘图延迟太高,那么您应该只对需要重绘的区域(使用queue_draw_area)进行无效处理,而不是同步绘制.