【Qt每天一例】3.创建一个线程
【摘要】
需求:创建一个线程并打印
继承QThread
继承QThread来实现一个线程
#include "mainwindow.h"
#include <QApplicatio...
需求:创建一个线程并打印
继承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();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
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();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
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();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。
原文链接:yujiang.blog.csdn.net/article/details/121988226
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)