QT创建线程以及结束线程

参考:
原文链接:https://blog.csdn.net/z1houcheng12/article/details/80595166
原文链接:http://blog.csdn.net/liang19890820/article/details/52186626

基本知识:
穿件线程的两种方法
方法一:
1:基于QThread创建一个线程对象
2:重写run函数,run函数就是线程运行的主体。
使用
1:实例化对象
2:调用start()就可以运行线程的run函数
方法二:
1:基于QObject创建对象 MObject;
2:实例化一个QThread对象
3,将MObject实例化的对象通过函数moveToThread():添加QThread实例化的对象

问题:
1.如何结束线程
2.线程使用完,资源回收问题
结束线程步骤:
1.发起线程退出操作,调用quit()
2.等待线程完全停止,删除创建在堆上的对象。
3.适当的使用wait()(用于等待线程的退出)和合理的算法。
下面介绍两种方式:<本质是一样的>
一.QMutex互斥锁 + bool成员变量。
customThread.h

class CustomThread:public QThread
{
	Q_OBJECT
public:
	explicit CustomThread(QWidget *parent = NULL);
	~CustomThread(){}
	//发起线程退出操作,调用quit()
	void quit();
	//线程运行的主体
	void run();
private:
    bool m_exist;//bool成员变量
    QMutex m_mutex;//QMutex互斥锁 
}

customThread.cpp

//主要是初始化m_exist
CustomThread::CustomThread(QWidget *parent):m_exist(true{
}
//当主线通过CustomThread对象调用quit接口,需要将m_exist设置为false,所以m_exist也可算是一个flag
CustomThread::quit()
{
   m_mutex.lock();
   m_exist= false;
   m_mutex.unlock();
}
//run函数中会有关于m_exist的判断,从而保证退出循环退出线程
CustomThread::run()
{
	while(true)
	{
		m_mutex.lock();
		if(m_exist == false) break;
		m_mutex.unlock();
		......//线程处理内容
	}
	m_mutex.unlock();
}

二:requestInterruption() + isInterruptionRequested()
可参考源码

方法二:
一:实现
1:基于QObject创建对象 MObject;

MyObject::MyObject(QObject *parent) : QObject(parent)
{
    
}

2:实例化一个QThread对象和MObject实例化的对象

MyObject *object = new MyObject;
QThread *thread = new QThread;

3,将MObject实例化的对象通过函数moveToThread():添加QThread实例化的对象

object->moveToThread(thread);

二:释放

        thread ->disconnect();//然后使用
        thread ->quit();//退出线程请求
        thread ->wait();//使线程正常退出。
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值