我正在开发一个应用程序,定期在窗口内的GTK绘图区域上绘制图像。
渲染首先效果很好,如果我在绘图上拖动另一个窗口,窗口内容会重新绘制,但经过一段随机时间(几秒钟)后,窗口会自动更新。
新图像不会显示,如果我然后将另一个窗口拖到渲染图像上,我会得到这个:
当我单击绘图区域下方的其中一个复选框时,窗口会刷新,问题会再消失几秒钟。
知道什么可以让GTK线程停止更新窗口内容?
我不知道我的代码的哪一部分有兴趣回答这个问题,所以我粘贴了大部分完整版本here。
我的GTK-main()被调用如下:
void window_main()
{
pthread_create(&drawing_thread, NULL, img_draw, NULL);
gtk_main();
gdk_threads_leave();
}
感谢任何提示! :)
答案 0 :(得分:2)
找到解决方案:在我使用的原始示例代码(here)中,他们使用g_timeout_add()
来注册他们的周期性绘图函数。
g_timeout_add()
注册的函数由gtk_main()
运行,这意味着它由gdk_threads_enter()
和gdk_threads_leave()
在内部保护。这是我不知道的一点。
用这两个函数包围我对gtk_widget_queue_draw_area()
的调用,错误消失了8)