我在Ubuntu 16上使用GTK+3/GDK。
我有一个g\U计时器服务例程,它做一些繁忙的工作,然后更新一些GTK标签和图形小部件。
在某些情况下,我注意到GDK计时器的服务例程(使用g\u timeout\u add()设置)运行时间长,并且GTK+3小部件不会从服务例程中的代码中更新。使用GTK2:
gdk_threads_enter(); ... gdk_threads_exit();
建议解决此问题。然而,GTK+3不推荐使用这些GDK线程调用。除了“所有GDK和GTK+调用都应该从主线程进行”之外,我找不到任何更新的文档
到目前为止,我找到的唯一解决方案是调用:
gtk_main_iteration_do(false);
在计时器服务例程结束时。这样做似乎总是迫使小部件使用更新的数据重新绘制。
那么,在GTK+3中有没有其他建议的方法来处理这个计时问题,或者GTK\u main\u interaction\u do()调用是否可以接受/最佳实践?
我还注意到,如果我将g\u timeout\u add()的间隔设置得太短,则服务例程的测量执行时间实际上会增加。我怀疑这可能是由于GDK主循环中运行的与此计时器相关的额外代码软件中断代码造成的。然而,我不知道如何证明这一点。GTK3/GDK是否会出现这种情况?