mbt 发表于 2012-4-13 10:21:34

用cairo绘图 类似内存泄漏的问题

我用cairo在窗口或子组件上绘图 其中有动画
在鼠标移动事件或时钟事件中更新数据 , 用gtk_widget_draw()或gtk_widget_queue_draw()引发窗口重绘事件。
现在是问题是:发现每一次更新窗口时,内存就增加几百K. 起初以为是GLIB在缓冲,但这是一只不断的累加上去。
那么怎么解决这个问题。

ACTom 发表于 2012-4-13 15:17:33

你代码呢?

mbt 发表于 2012-4-14 11:32:05

代码没带 我没网 我写个精简版的。

画板暴露事件()
{
      /*Cairo的绘制代码和论坛里的教程的代码一个路数*/
   /*每当执行cairo绘制后 内存就向上累加*/
      /*cairo 绘图代码;*/
      cairo_t cr = gdk_cairo_create();
       //绘制矩形
      释放对象(cr);

}

/*作用 让窗口重绘*/
鼠标移动事件(GtkWidget widget)
{
   
      /*不是这里的问题 是我粗心*/
      变量 re;
      //re 设置代码
      gtk_widget_draw(widget, &re);
   
      
      /*后改成如下函数问题依旧存在*/
      gtk_widget_queue_draw(widget);

}

/*主函数*/

int main()
{
      //创建窗口函数
      //创建画板函数

      /*真正的问题在暴露事件里*/
       连接 画板暴露事件;

       连接 鼠标移动事件;
}

ACTom 发表于 2012-4-14 13:23:04

你试试gtk_widget_queue_draw_area()

mbt 发表于 2012-4-14 13:42:50

这个好像也试过 跟gtk_widget_draw()类似;
还有一个 gtk_widget_queue_clear() 也试过 遭遇相同

不知还有无其他方法引发窗口重绘事件,主要是cairo绘制的图像能实时更新。

mbt 发表于 2012-4-18 10:59:41

求救

mbt 发表于 2012-4-20 12:30:25

再次求救

mbt 发表于 2012-4-22 09:48:21

mbt 发表于 2012-4-26 11:11:11

解决了 谢天谢地
页: [1]
查看完整版本: 用cairo绘图 类似内存泄漏的问题