2

我正在编写一个 C++ 应用程序,其主窗口需要从服务器接收实时数据,并根据这些数据实时绘制图表和直方图。我正在使用 GTK3(实际上是它的 C++ 绑定 gtkmm)和 Cairo。

特别是每1秒从网络接收一次数据,每次接收到数据都会刷新一次,因此每1秒一次。刷新是通过调用整个绘图区域的 invalidate_rect() 方法完成的,其 on_draw() 甚至使用新接收到的数据重新绘制所有图形和绘图。

现在,该应用程序可以工作,但它非常不可靠。特别是,它经常冻结,尤其是当 CPU 负载增加时。我的应用程序的 CPU 使用率以及内存非常低。突然窗口变成灰色且没有响应,我需要用 Ctrl-C 将其杀死,因为即使按下窗口关闭图标也不起作用。

我想知道:在上面的场景中调用 invalidate_rect() 是错误的方法吗?使用 GTKMM/Cairo 以可靠的方式获得平滑图形的更好方法是什么?

4

0 回答 0