1

ウィンドウ内の GTK 描画領域に定期的に画像を描画するアプリケーションを開発しています。

レンダリングは最初はうまく機能し、別のウィンドウを描画ウィンドウの上にドラッグすると、ウィンドウの内容が再描画されますが、ランダムな時間 (数秒) が経過すると、ウィンドウは更新を停止します。

新しい画像が表示されず、別のウィンドウをレンダリング ウィンドウの上にドラッグすると、次のようになります。

ウィンドウの内容が更新されなくなった

作図領域の下にあるチェックボックスの 1 つをクリックすると、ウィンドウが更新され、問題はさらに数秒間解消されます。

GTK スレッドがウィンドウ コンテンツの更新を停止する原因は何ですか?

私のコードのどの部分がその質問に答えるのに興味があるのか​​わからないので、ほとんど完全なバージョンをここに貼り付けました。

私の GTK-main() は次のように呼び出されます。

void window_main()
{
    pthread_create(&drawing_thread, NULL, img_draw, NULL);

    gtk_main();

    gdk_threads_leave();
}

ヒントをありがとう!:)

4

1 に答える 1

2

解決策を見つけました:私が使用した元のサンプルコード(here)では、 a を使用しg_timeout_add()て定期的な描画関数を登録しています。

登録されたg_timeout_add()関数は によって実行されます。つまり、およびgtk_main()によって内部的に保護されています。知らなかった点です。gdk_threads_enter()gdk_threads_leave()

私の呼び出しをgtk_widget_queue_draw_area()これらの 2 つの関数で囲み、バグはなくなりました 8)

于 2012-01-26T22:05:15.057 に答える