我有一个程序(用 C 编写,目前在 Mac OS X 10.8.4 上运行)模拟一个世界并每秒多次更新世界的状态。
在启动时,该程序会创建一个后台线程,该线程会创建一个简单的 GTK 窗口并调用gtk_main
.
每次更新世界状态后(在主线程中),我希望窗口反映这种变化。我的第一种方法是在世界更新后简单地更新 GTK 小部件,但因为那是在不同的线程中,所以事情变得非常混乱。
是否存在某种机制,主线程可以更新图形线程上的某些状态,然后将提示图形线程重绘的事件排队?IE
void draw() {
// This can only be called from the graphics thread.
gtk_label_set(GTK_LABEL(label1), "some state");
}
// This causes draw() to be called on the graphics thread.
gtk_please_redraw_this_thing_on_the_graphics_thread();
有没有办法做到这一点?或者任何涵盖它的教程?