Qt 多线程之MoveToThread()
来源:互联网 发布:淘宝网木质沙发 编辑:程序博客网 时间:2024/06/08 12:32
本文粗略整理一下关于Qt 多线程中MoveToThread()的用法,以便回顾。
Qt中想实现多线程技术是很方便的,只需要子类化QThread且重新实现它的run()即可。可参阅《C++ GUI Qt4编程》第二版的第十四章。
MoveToThread()也能用于实现多线程,见代码:
#include "DBMoveToThread.h"#include <QThread>DBMoveToThread::DBMoveToThread(QObject *parent) : QObject(parent){ DBThread *thread = new DBThread; this->moveToThread(thread); thread->start();}void DBMoveToThread::callWork(){ qDebug()<<"callWork : "<<QThread::currentThread();}void DBMoveToThread::slotWork1(){ qDebug()<<"slotWork1 : "<<QThread::currentThread();}void DBMoveToThread::slotWork2(){ qDebug()<<"slotWork2 : "<<QThread::currentThread();}void DBMoveToThread::slotWork3(){ qDebug()<<"slotWork3 : "<<QThread::currentThread();}
定义了一个继承自QObject的类:DBMoveToThread,子类化QThread类,然后将DBMoveToThread对象(this)丢进thread中,thread->start();语句就是开启一个线程,相当于《C++ GUI Qt4编程》中说的run()函数。这样之后,DBMoveToThread对象中的槽函数就会在非GUI线程中运行。
此处生成了3个对象:
work(用于调用callwork()函数,预计在GUI线程中运行)
work12(调用槽函数:slotwork1(),slotwork2(),预计在同一个线程中运行)
work3(调用槽函数:slotwork3(),预计在另外一个线程中运行)
调用slot函数的代码如下:
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); work = new DBMoveToThread; work12 = new DBMoveToThread; work3 = new DBMoveToThread; connect(ui->callButton,SIGNAL(clicked()),this,SLOT(maincall())); connect(ui->slot1Button,SIGNAL(clicked()),work12,SLOT(slotWork1()),Qt::QueuedConnection); connect(ui->slot2Button,SIGNAL(clicked()),work12,SLOT(slotWork2()),Qt::QueuedConnection); connect(ui->slot3Button,SIGNAL(clicked()),work3,SLOT(slotWork3()),Qt::QueuedConnection);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::maincall(){ work->callWork();}
class DBThread是个空架子,主要是希望这个类能实现多线程:继承自QThread,.h代码如下:
#ifndef DBTHREAD_H#define DBTHREAD_H#include <QThread>class DBThread : public QThread{ Q_OBJECTpublic: explicit DBThread(QObject *parent = 0);private:signals:public slots:};#endif // DBTHREAD_H
程序运行之后观察调试信息,和预计看相符否。
点击按钮 次序call---->slot_1---->slot_2---->slot_3
输出见附图(图上房了,在顶部):
callwork() 直接调用-----------处于GUI线程中
slotwork1,2()是调用的槽函数,对象是work12-------------新的线程中
slotwork3()是调用的槽函数,对象是work3-------------另外一个线程中
- Qt 多线程之MoveToThread()
- Qt线程之moveToThread
- QT 线程之 moveToThread()
- qt,使用moveToThread函数实现多线程
- Qt moveToThread
- Qt moveToThread
- Qt moveToThread
- Qt多线程两种方式优劣,继承QThread还是MoveToThread
- qt thread with movetothread
- 在Qt使用moveToThread()
- Qt moveToThread使用说明
- Qt 线程 ---movetothread
- 【Qt】QThread::moveToThread
- 基于moveToThread的多线程
- 线程使用方法之moveToThread
- 理解QT线程中的moveToThread
- qt中movetothread的使用
- 在Qt使用moveToThread() qt的线程
- GET与POST传输的区别
- uva 12125 March of the Penguins (最大流)
- Oracle存储过程单步调试方法
- 注册mysql为系统服务and命令行启动
- POJ - 3984 - 迷宫问题
- Qt 多线程之MoveToThread()
- linux随笔-3
- PHP学习总结(一)
- 面试中经常出现的算法1(整理)
- SQLite多线程使用总结
- grails+oracle 一次实际操作记录
- UIScreen获取两种类型画面尺寸
- Java实现文件拷贝的4种方法
- OpenBLAS,Numpy,Scipy For Linux