可以通过QThread实现跨平台的多线程开发,Qt库负责在特定平台上的特定多线程实现。要采用QThread进行多线程开发,首先需要包含头文件:

#include <QThread>
然后需要从QThread继承一个自己的线程类,暂作MyThread,关键是要实现QThread内的一个虚函数run。在run函数内部,最后一般都调用exec(),使得线程进入事件循环,否则线程主函数run运行结束,线程也就退出了。
class MyThread : public QThread
{
public:
   MyThread();
public:
   Dialog *parent;
public:
   void run();
};
其中,parent存储的是创建该线程的窗口,也就是该线程的父线程,主要用于该子线程向父线程发送特定事件,以便进行线程间通信。
 
自定义消息首先需要包含头文件:
#include <QEvent>
然后定义自己的事件值:
const QEvent::Type MyEvent = (QEvent::Type)1234;
然后在run函数里面(实际上是指在任何你想要和父线程进行通信的地方,我这里简化为就是在run函数内部了)通过:
QApplication::postEvent(parent, new QEvent(MyEvent));
将该事件发送出去。
父线程内通过改写虚函数event,来使得能够捕获消息:
bool Dialog::event(QEvent *event)
{
   if (event->type() == MyEvent)
   {
      QMessageBox::information(this, "INFORMATION", "This is son sented signal!");
      return true;
   }
   return QWidget::event(event);
}
这样,两个线程就能够同时运行并能够进行线程间通信了。

http://www.cnblogs.com/bingcaihuang/archive/2011/03/16/1985971.html

最新文章

  1. UVA 11464 暴力+位运算 ***
  2. 常见sizeof 笔试题
  3. mysql 中文乱码解决方法
  4. TYVJ1460 旅行
  5. C语言语句分类:大致可分为六大类
  6. eclipse+maven 无法编译
  7. poj1988 Cube Stacking
  8. 关于Excel中的需求或者是用例导入到QC中遇到的问题
  9. SQL中使用WITH AS提高性能
  10. iOS集成微信支付
  11. openEntityForm时候如何给关于(regardingobjectid)类型查找字段赋值?
  12. Gradle、Gradle Wrapper与Android Plugin for Gradle
  13. ping不通公网ip时路由器设置
  14. CRM项目(一)
  15. JEECG 上传插件升级-代码生成器
  16. Django之数据表增删改查
  17. Django框架(八) Django之ORM数据库操作
  18. (C/C++学习笔记) 六. 表达式
  19. Jmeter(九)JDBC连接池
  20. File &quot;/usr/bin/yum&quot;, line 30 except KeyboardInterrupt, e:

热门文章

  1. 解决Windows 10下Wireshark运行问题
  2. BZOJ3309 : DZY Loves Math
  3. UIView 周围出现黑线的解决方法
  4. CMYK印刷色
  5. Mysql_mysql force Index 强制索引
  6. Java中替换HTML标签的方法代码
  7. SQL中distinct的用法(转自博主:Rain Man)
  8. 用Git进行协同开发
  9. SQL中的charindex()方法
  10. jar MANIFEST.MF 汇总