世界をシミュレートし、毎秒複数回世界の状態を更新するプログラム (C で記述され、現在 Mac OS X 10.8.4 で実行されている) があります。
このプログラムは起動時に、単純な GTK ウィンドウを作成して を呼び出すバックグラウンド スレッドを作成しますgtk_main
。
(メイン スレッドで) 世界の状態が更新されるたびに、その変更をウィンドウに反映させたいと思います。私の最初のアプローチは、世界が更新された後に単純に GTK ウィジェットを更新することでしたが、それが別のスレッドにあったため、事態はかなり混乱しました。
メインスレッドがグラフィックスレッドの状態を更新し、グラフィックスレッドに再描画を促すイベントをキューに入れるメカニズムはありますか? いえ
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();
これを行う方法はありますか?またはそれをカバーするチュートリアルはありますか?