QT 笔记5 |Qt多线程(QThread)

本文深入探讨了Qt中多线程的两种创建方法:通过QObject::moveToThread和继承QThread。详细介绍了如何使用QMutex和QSemaphore进行线程同步。接着,文章介绍了数据库的基本概念,列举了常见数据库类型,并详细阐述了Sqlite数据库的安装、基本操作,包括创建表、插入数据、删除数据、更新数据和查询数据。最后,讲解了在Qt应用程序中如何使用Sqlite数据库,涉及QSqlDatabase、QSqlQuery及QSqlQueryModel的使用。
摘要由CSDN通过智能技术生成

一 Qt多线程(QThread)
1 创建线程方法1:QObject::moveToThread
class Myclass:public QObject{
Q_OBJECT
public slots:
void func(void){
//耗时或阻塞操作,需要放在子线程中执行
}
};
QThread thread;//子线程对象
Myclass myobject;//需要放在子线程中工作对象
myobject.moveToThread(&thread);//将myobject对象移动到子线程中
connect(xx,SIGNAL(xx),&myobject,SLOT(func()));//连接信号和槽函数
thread.start();//开启子线程

2 创建线程方法2:继承QThread,重写线程入口函数run
class MyClass:public QThread{
protected:
virtual void run(void){
//耗时或阻塞操作,需要放在子线程中执行
}
};
MyClass mythread;//创建子线程对象
mythread.start();//开启子线程,子类中重写run函数将会在子线程中执行

案例:多线程打印消息
1)方法1:工程(Thread1)
2)方法2:工程(Thread2)

3 线程同步
1)互斥锁:QMutex
eg:
QMutex mutex;
void run(void){
mutex.lock();//加锁
//访问共享资源start
if(“Error1”){
mutex.unlock();//解锁
return;
}
else if(“Error2”){
mutex.unlock();//解锁
return;
}
//访问共享资源end
mutex.unlock();//解锁
}
------------------------------------
eg:QMutexLocker简化加锁和解锁过程;
QMutex mutex;
void run(void){
QMutexLocker locker(&mutex);//加锁
//访问共享资源start
if(“Error1”){
return;
}
else if(“Error2”){
return;
}
//访问共享资源end
}//析构locker时,在析构函数中自动解锁

2)信号量:QSemaphore
//初始化信号量计数值5,表示有5个可用的共享资源
QSemaphore sem(5); // sem.available() == 5
//获取3个共享资源,剩余2个可用的共享资源
sem.acquire(3); // sem.available() == 2
//获取2个共享资源,剩余0个可用的共享资源
sem.acquire(2); // sem.availa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值