C、 GTK:窗口停止更新
我正在开发一个应用程序,定期在窗口内的GTK绘图区域上绘制图像 如果我将另一个窗口拖动到绘图窗口上,则渲染首先会正常工作,窗口内容会重新绘制,但在一段随机时间(几秒钟)后,窗口会停止更新自身 新图像不会显示,如果我在渲染窗口上拖动另一个窗口,我会得到以下结果: 当我单击绘图区域下方的某个复选框时,窗口将刷新,问题将在几秒钟内消失 知道什么会让GTK线程停止更新窗口内容吗? 我不知道我的代码的哪一部分对回答这个问题感兴趣,所以我粘贴了大部分完整的版本 我的GTK-main()的调用方式如下:C、 GTK:窗口停止更新,gtk,window,cairo,updating,gdk,Gtk,Window,Cairo,Updating,Gdk,我正在开发一个应用程序,定期在窗口内的GTK绘图区域上绘制图像 如果我将另一个窗口拖动到绘图窗口上,则渲染首先会正常工作,窗口内容会重新绘制,但在一段随机时间(几秒钟)后,窗口会停止更新自身 新图像不会显示,如果我在渲染窗口上拖动另一个窗口,我会得到以下结果: 当我单击绘图区域下方的某个复选框时,窗口将刷新,问题将在几秒钟内消失 知道什么会让GTK线程停止更新窗口内容吗? 我不知道我的代码的哪一部分对回答这个问题感兴趣,所以我粘贴了大部分完整的版本 我的GTK-main()的调用方式如下: v
void window_main()
{
pthread_create(&drawing_thread, NULL, img_draw, NULL);
gtk_main();
gdk_threads_leave();
}
谢谢你的提示!:) 找到了解决方案:在我使用的原始示例代码()中,他们使用
g\u timeout\u add()
来注册他们的定期绘图函数
g\u timeout\u add()
-注册函数由gtk\u main()
运行,这意味着它受到gdk\u threads\u enter()
和gdk\u threads\u leave()的内部保护。这是我没有意识到的一点
使用这两个函数调用了gtk\u widget\u queue\u draw\u area()
,错误消失了8)好的,我进一步追踪了问题:绘图区域小部件不再接收任何曝光事件。这就是为什么它没有被重新绘制。问题是为什么。。。