QThread与其他线程间相互通信
转载请注明链接与作者huihui1988
QThread的用法其实比较简单,只需要派生一个QThread的子类,实现其中的run虚函数就大功告成, 用的时候创建该类的实例,调用它的start方法即可。但是run函数使用时有一点需要注意,即在其中不能创建任何gui线程(诸如新建一个QWidget或者QDialog)。如果要想通过新建的线程实现一个gui的功能,那么就需要通过使用线程间的通信来实现。这里使用一个简单的例子来理解一下 QThread中signal/slot的相关用法。
首先,派生一个QThread的子类
MyThread.h
- class MyThread: public QThread
- {
- Q_OBJECT
- public:
- MyThread();
- void run();
- signals:
- void send(QString s);
- };
void send(QString s)就是定义的信号
MyThread.cpp
- #include "MyThread.h"
- MyThread::MyThread()
- {
- }
- void MyThread::run()
- {
- while(true)
- {
- sleep(5);
- emit send("This is the son thread");
- //qDebug()<<"Thread is running!";
- }
- exec();
- }
emit send("This is the son thread") 为发射此信号,在run中循环发送,每次休眠五秒
之后我们需要在另外的线程中定义一个slot来接受MyThread发出的信号。如新建一个MyWidget
MyWidget .h
- class MyWidget : public QWidget {
- Q_OBJECT
- public:
- MyWidget (QWidget *parent = 0);
- ~Widget();
- public slots:
- void receiveslot(QString s);
- };
void receiveslot(QString s)就用来接受发出的信号,并且实现参数的传递。
MyWidget .cpp
- #include "MyWidget.h"
- MyWidget::MyWidget(QWidget *parent) :QWidget(parent)
- {
- }
- MyWidget::~MyWidget()
- {
- }
- void MyWidget::receiveslot(QString s)
- {
- QMessageBox::information(0,"Information",s);
- }
接受函数实现弹出发送信号中所含参数(QString类型)的消息框
在main()函数中创建新线程,来实现两个线程间的交互。
main.cpp
- #include <QtGui>
- #include "MyWidget.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MyWidgetw;
- w.show();
- MyThread *mth= new MyThread ;
- QObject::connect(mth,SIGNAL(send(QString)),&w,SLOT(receiveslot(QString)));
- mth->start();
- return a.exec();
- }
运行后,当MyWidget弹出后,子线程MyThread每隔5S即会弹出一个提醒窗口,线程间通信就此完成。
http://blog.csdn.net/huihui1988/article/details/5665432
QThread与其他线程间相互通信的更多相关文章
- iOS开发多线程篇—线程间的通信
iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...
- Java核心知识点学习----多线程并发之线程间的通信,notify,wait
1.需求: 子线程循环10次,主线程循环100次,这样间隔循环50次. 2.实现: package com.amos.concurrent; /** * @ClassName: ThreadSynch ...
- java多线程详解(6)-线程间的通信wait及notify方法
Java多线程间的通信 本文提纲 一. 线程的几种状态 二. 线程间的相互作用 三.实例代码分析 一. 线程的几种状态 线程有四种状态,任何一个线程肯定处于这四种状态中的一种:(1). 产生(New) ...
- iOS边练边学--多线程NSOperation介绍,子类实现多线程的介绍(任务和队列),队列的取消、暂停(挂起)和恢复,操作依赖与线程间的通信
一.NSOperation NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加 ...
- 新建线程与UI线程间的通信
现在用一个实例来演示一下自己的新建线程与UI线程间的通信. UI界面包含3个控件: 一个输入框,用来输入数字: 一个显示框,用来显示从2开始,到输入数字之间的所有质数: 一个按钮,点击后获取输入框输入 ...
- C# 线程间互相通信
C#线程间互相通信主要用到两个类:AutoResetEvent和ManualResetEvent. 一.AutoResetEvent AutoResetEvent 允许线程通过发信号互相通信,线程通过 ...
- Handler不同线程间的通信
转http://www.iteye.com/problems/69457 Activity启动后点击一个界面按钮后会开启一个服务(暂定为padService),在padService中会启动一个线程( ...
- Java多线程中线程间的通信
一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.u ...
- C# 线程间互相通信 AutoResetEvent和ManualResetEvent
C#线程间互相通信主要用到两个类:AutoResetEvent和ManualResetEvent. 一.AutoResetEvent AutoResetEvent 允许线程通过发信号互相通信,线程通过 ...
随机推荐
- SSH自动部署
我的是windows环境,目前开发的过程中,有些项目需要一下子部署到很多的linux服务器上.写了个脚本能够自动上传文件和执行部署任务.完成这个任务需要的条件包括SSH配置和一个执行脚本. 准备 1. ...
- Reverse Nodes in k-Group 解答
Question Given a linked list, reverse the nodes of a linked list k at a time and return its modified ...
- Message Authentication Code
- ubuntu14.04 安装 StudioZend12
到官网下载:http://www.zend.com/en/products/studio/downloadsLinux-64位:http://downloads.zend.com/studio-ecl ...
- Maven项目部署方案
以xbank项目做为应用背景,简单说明一下Maven项目的部署方案: 1.项目说明 xbank基础服务端的11个子项目均采用Maven搭建: 其中各项目功能设计如下: froad-xbank-serv ...
- BOOST 线程完全攻略 - 结束语
modulethread扩展多线程破解通讯 全文介绍了3个boost::thread的扩展类,希望能给大家书写多线程代码带来便捷. thread -> controlled_module_ex ...
- jQuery中的trigger和triggerhandler区别
$("form :input").blur(function(){ // }).keyup(function(){ $(this).triggerHandler("blu ...
- Sql Server中charindex、patindex的区别
SQL代码如下: select charindex('1,','121,1,1234') select patindex('%1,%','121,1,1234') ','121,1,1234') se ...
- 第二章 Android Studio使用第三方模拟器
1.为什么要使用第三方模拟器 Android Studio自带模拟器,相对Eclipse来说项目启动速度的确快了很多倍,提高了开发效率.但和第三方模拟器进行对比的话,还是第三方的模拟器运行速度更快些. ...
- oracle用户权限的问题
一.创建用户 create user username identified by password --username 创建的用户的名称 --password 创建的用户的密码 二.赋权限 gra ...