C,GTK:窗口停止更新

时间:2012-01-25 20:29:04

标签: gtk window cairo updating gdk

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

渲染首先效果很好,如果我在绘图上拖动另一个窗口,窗口内容会重新绘制,但经过一段随机时间(几秒钟)后,窗口会自动更新。

新图像不会显示,如果我然后将另一个窗口拖到渲染图像上,我会得到这个:

Window content not updated anymore

当我单击绘图区域下方的其中一个复选框时,窗口会刷新,问题会再消失几秒钟。

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

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

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

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

    gtk_main();

    gdk_threads_leave();
}

感谢任何提示! :)

1 个答案:

答案 0 :(得分:2)

找到解决方案:在我使用的原始示例代码(here)中,他们使用g_timeout_add()来注册他们的周期性绘图函数。

g_timeout_add()注册的函数由gtk_main()运行,这意味着它由gdk_threads_enter()gdk_threads_leave()在内部保护。这是我不知道的一点。

用这两个函数包围我对gtk_widget_queue_draw_area()的调用,错误消失了8)