当前位置:网站首页>QT 线程退出的几种方式
QT 线程退出的几种方式
2022-07-22 22:12:00 【恋恋西风】
QTread 退出,可以几种方式,使用变量; 也可以使用 QWaitCondition;
1. 使用变量 ,外部将变量置为 false
#define WORKOBJECT_H
#include <QObject>
#include <QThread>
#include <QDebug>
#include<QMutexLocker>
#include<QMutex>
#include<QWaitCondition>
class WorkObject : public QObject
{
Q_OBJECT
public:
explicit WorkObject(QObject *parent = nullptr);
signals:
public slots:
void doWork();
void stopWork();
private:
bool exitflag;
QWaitCondition mWaitStatusCondition;
QMutex mWaitMutex;
};
#endif // WORKOBJECT_Hcpp
#include "workobject.h"
WorkObject::WorkObject(QObject *parent) : QObject(parent)
{
}
void WorkObject::doWork()
{
while(true)
{
QMutexLocker locker(&mWaitMutex);
if(!exitflag)
{
qDebug() << "MyThread eixt ================ :" ;
return;
}
// if(mWaitStatusCondition.wait(&mWaitMutex,1))
// {
// qDebug() << "MyThread eixt ================ :" ;
// return;
// }
qDebug() << "MyThread thread id:" << QThread::currentThreadId();
//sleep(10);
//QThread::sleep(1);
}
qDebug() << "doWork thread exit========:" << QThread::currentThreadId();
}
void WorkObject::stopWork()
{
QMutexLocker locker(&mWaitMutex);
{
exitflag = false;
// mWaitStatusCondition.wakeAll();
}
}
2. 也可以使用 QWaitCondition
QWaitCondition最大的好处,我以为,是能在一个线程中唤醒一个或多个其它线程,固然前提是,其它线程在等待某个QWaitCondition,不然不起做用,你唤醒也没用。QWaitCondition必须与QMutex或者QReadwriteLock一块儿用
mWaitStatusCondition.wakeAll();
#include "workobject.h"
WorkObject::WorkObject(QObject *parent) : QObject(parent)
{
}
void WorkObject::doWork()
{
while(true)
{
QMutexLocker locker(&mWaitMutex);
if(!exitflag)
{
return;
}
if(mWaitStatusCondition.wait(&mWaitMutex,1))
{
qDebug() << "MyThread eixt ================ :" ;
return;
}
qDebug() << "MyThread thread id:" << QThread::currentThreadId();
//sleep(10);
//QThread::sleep(1);
}
qDebug() << "doWork thread exit========:" << QThread::currentThreadId();
}
void WorkObject::stopWork()
{
QMutexLocker locker(&mWaitMutex);
{
//exitflag = false;
mWaitStatusCondition.wakeAll();
}
}
边栏推荐
猜你喜欢

Hcip --- BGP comprehensive experiment

It can't be true? Nailing has been downloaded. Don't you know you can play like this?

Internet traffic scheduling scheme

实验六 MPEG

Experiment 5 JPEG

Wechat applet project practice

Redis 事务学习有感

21 -- product of arrays other than itself

matlab simulink 水能和同步电机发电

MySQL消息队列表结构
随机推荐
php数组下标是不是只能从0开始
笔者认为,元宇宙与互联网的发展逻辑在某种成都上是截然不同的
实验三 LZW
Hcip --- BGP comprehensive experiment
實驗二 YUV
Networkx visualizes graphs
数据库基础及安装
HCIP --- BGP综合实验
Mysql A left(right) join B on A.id=B. ID and a.age=1 and a left (right) join b on a.id=b id where A.age=1
树以及二叉树的常用性质以及遍历
目标检测之锚点与锚框
Qt+VTK+PCL图片转灰度图且以灰度为Y轴显示
Niuke Xiaobai month race 53
开发者分享|MindSpore Lite 体验,一键实现图像分割
挖财和启牛都是干什么的开户安全吗?
【读书笔记->统计学】12-01 置信区间的构建-置信区间概念简介
如何高效安装MindSpore的GPU版本
wps数据拆分
Example analysis of SQL error reporting and blind injection
Solution to the second game of 2022 Hangzhou Electric Multi school league