快速业务通道

Linux系统下QT中的多线程编程

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
事件的方法,在主线程中安装一个事件过滤器,来捕捉从各个对象中发来的自定义 事件,然后发出信号调用主线程中的一个槽函数。

另外,也可以利用Qt中的定时器机制实现类似的功能,而又不必担心Thread-safe问题。下面就是有关 的代码部分:

在用户定义的Server类中创建和启动了定时器,并利用connect函数将定时器超时与读取设备文件数据 相关联:

  Server:: Server(QWidget *parent) : QWidget(parent)
  {
  readTimer = new QTimer(this);  //创建并启动定时器
 connect(readTimer, SIGNAL(timeout()),
this, SLOT (slotReadFile()));  //每当定时器超时时调用函数slotReadFile读取文件
    readTimer- >start(100);
  }

  slotReadFile函数负责在定时器超时时,从文件中读取数据,然 后重新启动定时器:

  int Server::slotReadFile()  // 消息读取和处理函数
   {
   readTimer->stop();   //暂时停止定时器计时
   ret = read(file, buf );  //读取文件
  if(ret == NULL)
  {  readTimer->start(100);   //当没有新消息时 ,重新启动定时器
     return(-1);
  }
   else
      根据buf中的内容 将消息分发给各个相应的对象处理……;
  readTimer->start(100);  //重新启动定时器
  }

在该程序中,利用了类似轮循的方式定时对用户指定的设备文件进行读取,根据读到的数据内容将信 息发送到各个相应的对象。用户可以在自己的GUI主线程中创建一个Server类,帮助实现底层的消息接收 过程,而本身仍然可以处理诸如界面显示的问题。当各个对象完成处理后,通过重新启动定时器继续进行 周期性读取底层设备文件的过程。当然,这种方法适合于各对象对事件的处理时间较短,而底层设备发来 消息的频率又相对较慢的情况。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号