C、 GTK:窗口停止更新

C、 GTK:窗口停止更新,gtk,window,cairo,updating,gdk,Gtk,Window,Cairo,Updating,Gdk,我正在开发一个应用程序,定期在窗口内的GTK绘图区域上绘制图像 如果我将另一个窗口拖动到绘图窗口上,则渲染首先会正常工作,窗口内容会重新绘制,但在一段随机时间(几秒钟)后,窗口会停止更新自身 新图像不会显示,如果我在渲染窗口上拖动另一个窗口,我会得到以下结果: 当我单击绘图区域下方的某个复选框时,窗口将刷新,问题将在几秒钟内消失 知道什么会让GTK线程停止更新窗口内容吗? 我不知道我的代码的哪一部分对回答这个问题感兴趣,所以我粘贴了大部分完整的版本 我的GTK-main()的调用方式如下: v

我正在开发一个应用程序,定期在窗口内的GTK绘图区域上绘制图像

如果我将另一个窗口拖动到绘图窗口上,则渲染首先会正常工作,窗口内容会重新绘制,但在一段随机时间(几秒钟)后,窗口会停止更新自身

新图像不会显示,如果我在渲染窗口上拖动另一个窗口,我会得到以下结果:

当我单击绘图区域下方的某个复选框时,窗口将刷新,问题将在几秒钟内消失

知道什么会让GTK线程停止更新窗口内容吗?

我不知道我的代码的哪一部分对回答这个问题感兴趣,所以我粘贴了大部分完整的版本

我的GTK-main()的调用方式如下:

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)

好的,我进一步追踪了问题:绘图区域小部件不再接收任何曝光事件。这就是为什么它没有被重新绘制。问题是为什么。。。