qt创建线程的四种方式

devtools/2024/12/28 7:00:21/

第一种

继承QThread类,然后重写run()函数

// 线程一
Mythread1 = new CMyThread;
connect(Mythread1,&CMyThread::sig_num,this,&MainWindow::slots_thread1);
connect(ui->pushButton,&QPushButton::clicked,[=](){Mythread1->m_state = ThreadState::RUN;Mythread1->start();});
connect(ui->pushButton_2,&QPushButton::clicked,[=](){Mythread1->m_state = ThreadState::STOP;});

第二种

创建一个线程,然后将要做的逻辑放到你创建的线程里。

 // 线程二Mythread2 = new CMyThreadTwo;m_thread2 = new QThread;Mythread2->moveToThread(m_thread2);connect(this,&MainWindow::sig_StartThread2,Mythread2,&CMyThreadTwo::slots_start);connect(Mythread2,&CMyThreadTwo::sig_num,this,&MainWindow::slots_thread2);bool b = connect(ui->pushButton_3,&QPushButton::clicked,[=](){Mythread2->m_state = ThreadState::RUN;m_thread2->start();emit sig_StartThread2();//Mythread2->Task();});connect(ui->pushButton_4,&QPushButton::clicked,[=](){Mythread2->m_state = ThreadState::STOP;});

第三种

run就完了!

// 线程三
connect(ui->pushButton_5,&QPushButton::clicked,[=](){m_state3 = ThreadState::RUN;QtConcurrent::run(this,&MainWindow::thread3);});
connect(ui->pushButton_6,&QPushButton::clicked,[=](){m_state3 = ThreadState::STOP;});

QtConcurrent::run是 Qt 框架提供的一个方便的函数,用于在一个单独的线程中运行一个函数。它允许你简单地将一个可调用对象(如函数、函数对象、lambda 表达式等)放到一个新的线程中执行,从而实现异步操作,避免阻塞主线程。这在处理一些耗时的任务(如文件读取、复杂的计算等)时非常有用,可以提高应用程序的响应速度和性能。

启动的时候用start()启动。如果直接调用的是run()函数的话,并不会创建一个新线程,任然是在主线程。

第四种

线程池

创建线程池,定义任务类,然后将任务放到线程池中

QThreadPool pool;
pool.setMaxThreadCount(5); // 设置线程池最大线程数为5//任务类
class PrintNumberTask : public QRunnable
{
public:void run() override{qDebug() << "Printing a number from a thread in the pool.";}
};int main()
{PrintNumberTask *task = new PrintNumberTask();QThreadPool::globalInstance()->start(task);// 或者使用自定义的线程池对象// pool.start(task);return 0;
}


http://www.ppmy.cn/devtools/146038.html

相关文章

[计算机网络]OSPF协议

开放最短路径优先OSPF 1&#xff09;OSPF的工作方式 1>和谁交换消息 使用洪泛法&#xff0c;向本自治系统的所有路由器发送消息。 2>交换什么消息 发送的消息就是与本路由器相邻的所有路由器的链路状态&#xff0c;但这只是路由器所知道的部分信息。 链路状态就是说…

【机器学习】因微知著,穷数通灵:微积分与机器学习的量化之美

文章目录 微积分基础&#xff1a;理解变化与累积的数学前言一、多重积分的基本概念与计算1.1 多重积分的定义与重要性1.1.1 多重积分的基本组成1.1.2 多重积分在机器学习中的应用 1.2 多重积分的历史与发展1.2.1 多重积分的历史1.2.2 多重积分的发展 二、微分方程的基本概念与解…

RCE-PLUS (学习记录)

源码 <?php error_reporting(0); highlight_file(__FILE__); function strCheck($cmd) {if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){return($cmd);}else{die("i hate this"…

大语言模型的token和向量

现在大语言模型火了&#xff0c;像 ChatGPT 什么的&#xff0c;能回答问题、写文章&#xff0c;。但它们为啥这么聪明呢&#xff1f;这就和向量、Token 有关系。那怎么通过向量、Token来理解我们的问题呢。看完这篇文章就知道了 token Token 就像是语言里的小积木&#xff0c…

前后端分离(前端删除数据库数据)

1.实现思路前端把用户Id用axios请求发送给后端&#xff0c;后端获取id&#xff0c;把用户数据删除并返回给前端一个删除成功响应 2.编写axios请求代码 const deleteEmployee async (empNo) > {try {const response await axios.delete(http://localhost:8080/api/delEmp,…

洞察 Facebook:用户行为与社交趋势

Facebook&#xff0c;作为全球最大社交平台之一&#xff0c;长期占据社交媒体的主导地位。自2004年成立以来&#xff0c;Facebook不仅影响了人们的社交方式&#xff0c;还推动了数字社交文化的演变。本文将洞察Facebook上的用户行为和社交趋势&#xff0c;探讨其如何塑造现代社…

天融信网络安全基础知识3

1.如果一个网站存在CSRF漏洞&#xff0c;可以通过CSRF漏洞做什么&#xff1f; D A获取网站用户注册的个人资料信息 B修改网站用户注册的个人资料信息 C冒用网站用户的身份发布信息 D以上都可以 2.Firefox浏览器插件Hackbar提供的功能没有什么&#xff1f;C A.修改浏览器访问…

Linux网络 | 网络计算器客户端实现与Json的安装以及使用

前言&#xff1a;本节讲述序列化和反序列化的相关内容。 这节的内容是博主前一篇博客的续章&#xff0c; 里面用到了很多知识点都是前一篇文章的。 友友们如果要学习序列化反序列化&#xff0c; 直接看本篇文章是看不懂的&#xff0c; 请看前一篇文章&#xff1a;linux网络 | 序…