Qt每天一例3.创建一个线程
Posted 鱼酱2333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt每天一例3.创建一个线程相关的知识,希望对你有一定的参考价值。
需求:创建一个线程并打印
继承QThread
继承QThread来实现一个线程
#include "mainwindow.h"
#include <QApplication>
#include <QtDebug>
class demo:public QThread
public:
demo();
~demo();
void run() override
while (true)
QThread::msleep(1000);
qDebug()<<QString::asprintf("%x",QThread::currentThreadId())<<"thread";
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
demo d1;
d1.start();
demo d2;
d2.start();
return a.exec();
QtConcurrent::run创建线程
使用QtConcurrent::run
QtConcurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数
Concurrent是并发的意思,QtConcurrent是一个命名空间,提供了一些高级的 API,使得在编写多线程的时候,无需使用低级线程原语,如读写锁,等待条件或信号。使用QtConcurrent编写的程序会根据可用的处理器内核数自动调整使用的线程数。这意味着今后编写的应用程序将在未来部署在多核系统上时继续扩展。
//首先追加 QT += concurrent
#include "mainwindow.h"
#include <QApplication>
#include <QtDebug>
class demo
public:
demo();
~demo();
void tick()
while (true)
QThread::msleep(1000);
qDebug()<<QString::asprintf("%x",QThread::currentThreadId())<<"thread";
;
#include <QtConcurrent/QtConcurrentRun>
int main(int argc, char *argv[])
QApplication a(argc, argv);
demo d1;
demo d2;
QtConcurrent::run(d1,&demo::tick);
QtConcurrent::run(d2,&demo::tick);
return a.exec();
QThreadPool线程池创建线程
优点:无需手动释放资源,QThreadPool启动线程执行完成后会自动释放。
缺点:不能使用信号槽与外界通信。
适用场景:QRunnable适用于线程任务量比较大,需要频繁创建线程。QRunnable能有效减少内存开销。
#include <QApplication>
#include <QRunnable>
#include <QThreadPool>
class Runnable:public QRunnable
public:
Runnable();
~Runnable();
void run()
while (true)
QThread::msleep(1000);
qDebug()<<QString::asprintf("%x",QThread::currentThreadId())<<"thread";
;
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
Runnable runObj1;
QThreadPool::globalInstance()->start(&runObj1);
Runnable runObj2;
QThreadPool::globalInstance()->start(&runObj2);
return a.exec();
以上是关于Qt每天一例3.创建一个线程的主要内容,如果未能解决你的问题,请参考以下文章