当前位置: 首页 > news >正文

QT创建线程

1、使用Worker + moveToThread的方式将任务移动到线程实例对象中。

(1)创建循环子线程

#ifndef WORKER_H #define WORKER_H #include <QObject> #include <chrono> #include <QThread> #include <QDebug> class Worker:public QObject { Q_OBJECT public: explicit Worker(QObject* parent = nullptr); public slots: void doWork(); signals: void workFinished(); }; #endif #include "Worker.h" Worker::Worker(QObject* parent):QObject(parent) { } void Worker::doWork() { int a = 0; qDebug()<< "子线程ID:" << QThread::currentThreadId(); while(1) { std::this_thread::sleep_for(std::chrono::seconds(1)); qDebug() << a++; if(a > 10) break; } //任务完成,退出 emit workFinished(); } #include <QCoreApplication> #include <QThread> #include <QTimer> #include <QDebug> #include "Worker.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //获取主线程id qDebug() << "主线程ID:" <<QThread::currentThreadId(); //创建线程实例 QThread* taskThread = new QThread(); //创建任务对象 Worker* worker = new Worker(); //将任务对象worker移动到线程实例中 worker->moveToThread(taskThread); QObject::connect(taskThread,&QThread::started,worker,&Worker::doWork);//任务开始 QObject::connect(worker,&Worker::workFinished,taskThread,&QThread::quit);//退出线程 QObject::connect(taskThread,&QThread::finished,taskThread,&QThread::deleteLater);//清理线程对象 QObject::connect(taskThread,&QThread::finished,worker,&QThread::deleteLater);//清理任务对象 //启动子线程 taskThread->start(); return a.exec(); }

(2)创建非循环子线程,在子线程中使用定时器。

#ifndef WORKER_H #define WORKER_H #include <QObject> #include <chrono> #include <QThread> #include <QDebug> #include <QTimer> class Worker:public QObject { Q_OBJECT public: explicit Worker(QObject* parent = nullptr); public slots: void doLoopWork(); void startTimer();//在子线程中启动定时器 private slots: void doTimerWork(); signals: void workFinished(); private: QTimer* timer = nullptr; }; #endif #include "Worker.h" Worker::Worker(QObject* parent):QObject(parent) { } void Worker::doLoopWork() { int a = 0; qDebug()<< "子线程ID:" << QThread::currentThreadId(); while(1) { std::this_thread::sleep_for(std::chrono::seconds(1)); qDebug() << a++; if(a > 10) break; } //任务完成,退出 emit workFinished(); } void Worker::startTimer() { qDebug() << "启动定时器,线程ID:" << QThread::currentThreadId(); timer = new QTimer(this); timer->setInterval(1000); QObject::connect(timer,&QTimer::timeout,this,&Worker::doTimerWork); timer->start(); } void Worker::doTimerWork() { static int a = 0; qDebug() << ++a; if(a > 10) { if(timer) { timer->stop(); } } } #include <QCoreApplication> #include <QThread> #include <QTimer> #include <QDebug> #include "Worker.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //获取主线程id qDebug() << "主线程ID:" <<QThread::currentThreadId(); //创建线程实例 QThread* taskThread = new QThread(); //创建任务对象 Worker* worker = new Worker(); //将任务对象worker移动到线程实例中 worker->moveToThread(taskThread); QObject::connect(taskThread,&QThread::started,worker,&Worker::startTimer);//任务开始 QObject::connect(worker,&Worker::workFinished,taskThread,&QThread::quit);//退出线程 QObject::connect(taskThread,&QThread::finished,taskThread,&QThread::deleteLater);//清理线程对象 QObject::connect(taskThread,&QThread::finished,worker,&QThread::deleteLater);//清理任务对象 //启动子线程 taskThread->start(); return a.exec(); }
http://www.jsqmd.com/news/611039/

相关文章:

  • 轮毂电机分布式驱动电动汽车驱动失效稳定性控制研究:Simulink建模与多模式控制策略分析
  • STM32最小系统PCB布线实战:从元器件布局到GND敷铜
  • 出门也能写代码?Claude Code远程玩法揭秘
  • 告别单片机!用CD4017计数器+RC消抖,5分钟搞定一个稳定耐用的单键开关
  • CodeMagicianT奈
  • Gitee下载单个文件的3种实战方法:从浏览器插件到命令行技巧
  • Vitis新建工程下载程序出现错误
  • LightGBM实战:从原理到高效实现
  • 2026年比较好的岩石铣挖机/宁波混凝土铣挖机定制加工厂家推荐 - 行业平台推荐
  • AUC 与 GAUC:从全局排序到用户内排序的理解厥
  • [实战] 图纸识别软件哪个好?从传统标注到AI自动生成检验计划的数字化转型
  • 2026年口碑好的聚氨酯保温厂家精选合集 - 行业平台推荐
  • OpenClaw跨平台配置指南:千问3.5-35B-A3B-FP8在mac与Win下的对接
  • OpenClaw安全实践:限制Phi-3-vision-128k-instruct的文件读写权限
  • Matlab七次非均匀B样条轨迹规划及基于NSGAII的优化方法
  • FastAPI状态共享秘籍:别再让中间件、依赖和路由“各自为政”了!哟
  • OpenClaw模型配置详解:Kimi-VL-A3B-Thinking多模态接口接入
  • 内网穿透工具对比:FRP、NPS、reGeorg和Venom的优缺点及适用场景
  • 保姆级避坑指南:用Ollama本地部署Qwen2.5+BGE模型,一次搞定LightRAG中文环境
  • 2026年靠谱的外墙喷涂保温优质厂家汇总推荐 - 行业平台推荐
  • OpenClaw配置优化:千问3.5-9B长文本处理的内存管理技巧
  • 如何永久保存微信聊天记录?这个免费工具让你轻松备份和分析所有对话![特殊字符]
  • 、SEATA分布式事务——XA模式奖
  • 【2025最新】基于SpringBoot+Vue的校园社团信息管理管理系统源码+MyBatis+MySQL
  • 2026年知名的可调机柜底座/电力系统机柜/河北服务器机柜/矿机机柜厂家哪家好 - 行业平台推荐
  • 开源工具Free-NTFS-for-Mac:跨平台NTFS设备高效管理指南
  • 零基础玩转OpenClaw:Qwen3.5-9B镜像云端体验指南
  • Linux线程同步
  • AppImageLauncher:5分钟掌握Linux AppImage应用的终极管理方案
  • 5分钟体验OpenClaw:星图平台Qwen3-4B镜像一键部署方案