Gtk线程刷新界面

唉,好怀恋Windows啊,那界面处理的刷刷的,线程处理的遛遛的,不管你如何风吹雨打……

可怜的我,整整一周时间,忙着不停的封 装调试,然后线程,同步,线程,界面……终于在五一

这样一个伟大的日子前搞定了,向劳动人民致敬……窃以为,做为一个纯情小男人 五四青年节

应该也有假的,但是dog sun的咋就不放呢……

-----------------------------------------------------------------------------------------

Linux的开发,才接触2周时间,所以自己所写的东西只是自己的一些理解,仅供参考。

一. 问题原因

    在Gtk编程的时候,可能会有从线程中刷新界面的需求,这个时候可能会给你带来一些问题。

Gtk中,所有的界面操作到最后都是在 gtk界面的主循环中搞定的,不管在哪个地方操作界面,也

只是向这个循环添加一个事件而已(当然这个过程是不需要你编程完成), 由主循环根据事件的优

先级一个个的完成。 ……,

    强调一点:gtk不是线程安全的。 如 果创建了线程,然后在线程中刷新界面,则可能得不到想要的

结果甚至可能引起程序崩溃。

二.解决方法

    没时间研究更好的方法了,因为毕竟在线程中更新界面不是一件很好的事情。 将就着解决下:

利用g_thread_init, gdk_threads_init, gdk_threads_enter, gdk_threads_leave……

[1]  g_thread_init:

  // 初始化线程安全
  if ( !g_thread_supported() )
  {
      printf("[%s]--Init g_thread./r/n", __FUNCTION__);
      g_thread_init(NULL);
      gdk_threads_init();
  }

   Linux下,文档和一些命名总是那么奇怪, g_thread_supported() 唉,这娃的意思是,有没有初始化过,

而 不是系统支不支持的意思,所以呢 前面的“!”不是笔误……

   g_thread_init函数,帮助文档里不直接写上初始化要在gtk_init()前调用,在 gdk_threads_init()函数的

帮 助中重点提示: g_thread_init函数 在gtk_init()前调用 ……

[2] 然后……

  gdk_threads_enter();
  gtk_main ();
  gdk_threads_leave; 

[3] 再然后……

线程里要更新界面的地方:

  gdk_threads_enter();
  ……
  gdk_threads_leave;

[4] 再然后……如果你编译不过去

-lgthread-2.0

-----------------------------------------------------------------

Linux 小菜鸟,随便写点……希望没写错

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值