2012-01-25 73 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)