qt定时信号量_Qt基础开发之Qt多线程类QThread与Qt定时器类QTimer的详细方法与实例...

本文详细介绍了Qt中实现多线程的两种方式,包括继承QThread和继承QObject并通过moveToThread方法。此外,还讲解了Qt定时器QTimer的使用,并强调了线程同步的重要性,如互斥锁和信号量的应用。最后提到了QThread和QTimer的注意事项,如对象内存管理和线程同步。
摘要由CSDN通过智能技术生成

Qt多线程

我们之前的程序都是单线程运行,接下来我们开始引入多线程。就相当于以前的一个人在工作,现在多个人一起工作。

Qt中非常有必要使用多线程,这是因为,Qt应用是事件驱动型的,一旦某个事件处理函数处理时间过久,就会造成其它的事件得不到及时处理。

Qt中使用QThread来管理线程,一个QThread对象,就是一个线程。QThread对象也有消息循序exec()函数,用来处理自己这个线程的事件。

Qt实现多线程有两种方式

​1、Qt第一种创建线程方式

首先要继承QThread

重写虚函数QThread::run

[virtual protected] void QThread::run()

/*

* 基类QThread的run函数只是简单启动exec()消息循环

*/

例如:

#include

#include

#include

class MyThread : public QThread

{

public:

void run()

{

qDebug() << "QThread begin" << endl;

qDebug() << "child thread" << QThread::currentThreadId() << endl;

QThread::sleep(5);

qDebug() << "QThread end" << endl;

exec();

}

};

int main(int argc, char** argv)

{

QApplication app(argc, argv);

MyThread thread;

thread.start();

qDebug() << "main thread" << QThread::currentThreadId() << endl;

QThread::sleep(5);

qDebug() << "main thread" << QThread::currentThreadId() << endl;

thread.quit();

qDebug() << "main thread thread.quit()" << endl;

tread.wait();

qDebug() << "main thread thread.wait()" << endl;

return app.exec();

}

使用QThread的quit可以退出线程的消息循环,有时候不是马上退出,需要等到cpu的控制权交还给线程的exec()。

一般在子线程退出的时候需要主线程去回收资源&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值