1

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

渲染首先效果很好,如果我将另一个窗口拖到绘图窗口上,窗口内容会重新绘制,但是在随机时间量(几秒钟)之后,窗口停止更新自身。

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

窗口内容不再更新

当我单击绘图区域下方的复选框之一时,窗口会刷新,并且问题又会消失几秒钟。

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

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

我的 GTK-main() 是这样调用的:

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

    gtk_main();

    gdk_threads_leave();
}

感谢您的任何提示!:)

4

1 回答 1

2

找到了解决方案:在我使用的原始示例代码中(在这里),他们使用 ag_timeout_add()来注册他们的周期性绘图功能。

-registeredg_timeout_add()函数由 运行gtk_main(),这意味着它在内部由gdk_threads_enter()和保护gdk_threads_leave()。这是我没有意识到的一点。

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

于 2012-01-26T22:05:15.057 回答