GTK搭建数采程序的多线程解决方法

对一个数据采集系统而言,通常需要一个图形交互界面,同时底层的采集过程也在连续进行并不断刷新,并不断显示和更新图形界面(比如刷新波形图)。

通常,图形界面GUI本身即是一个循环,界面上的控件产生信号,界面主循环MainLoop能够响应这些信号并执行相应的回调函数。

在LabWindows/CVI以及C#.NET里,这个问题很好解决,使用一个Timer控件即可。Timer控件可以实时产生一个TICK信号/事件,比如CVI里就是EVENT_TIMER_TICK。我们只需要把回调函数和这个TICK事件连接起来,在图形界面主循环执行过程中会循环响应这个Timer控件发出的TICK,并执行callback。callback可以是采集函数、波形显示函数等等。这样就做到了底层采集过程和主界面同时进行和刷新。T

但是,gtk没有类似上面提到的Timer这样功能的部件。glib中只有Gtimer相关的函数,但只是一个计时器,并不能实时循环产生信号。GtkMain本身即是一个循环。对于采集过程而言,我们也希望能够循环执行数据采集、波形显示和刷新过程,但是主界面循环和采集过程循环怎么同时执行呢?

在stackoverflow上有关于这个问题的很好的回答:http://stackoverflow.com/questions/8826523/gtk-main-and-unix-sockets点击打开链接

One solution is to integrate your events into the event loop of Gtk+.

You can make Gtk+ watch/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值