2012-01-25 78 views
1

我正在開發一個應用程序,它定期在窗口內的GTK繪圖區域上繪製圖像。C,GTK:窗口停止更新

如果我在繪圖上拖動另一個窗口,但在一些隨機時間(幾秒)後窗口停止更新,窗口內容將重新繪製。

新圖片不要讓她顯示了,如果我再在渲染一個將另一個窗口,我得到這個:

Window content not updated anymore

當我點擊我下面的繪圖區域的複選框中的一個,該窗口被刷新問題再過幾秒鐘就消失了。

任何想法可以讓GTK線程停止更新窗口內容?

我不知道我的代碼的哪一部分有興趣回答這個問題,所以我粘貼了大部分完整版本here

我的GTK的主()被調用是這樣的:

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

    gtk_main(); 

    gdk_threads_leave(); 
} 

感謝任何提示! :)

+0

好吧,我追蹤的問題進一步下跌:繪圖區域Widget沒有收到任何曝光的事件了。這就是爲什麼它不重繪。問題是爲什麼... – lynix

回答

2

找到解決方案:在我使用的原始示例代碼(here)中,他們使用g_timeout_add()來註冊其定期繪圖功能。

g_timeout_add()註冊的函數由gtk_main()運行,這意味着它在內部由gdk_threads_enter()gdk_threads_leave()保護。這是我沒有意識到的一點。

環繞我呼籲gtk_widget_queue_draw_area()這兩個函數和錯誤走了8)