写点什么

Qt | 线程 QThread

作者:YOLO.
  • 2022-10-13
    河北
  • 本文字数:764 字

    阅读完需:约 3 分钟

Qt | 线程 QThread

前言:

Qt 中的 QThread 类用来进行多任务的处理。线程可以做到单个进程做不到的事情。例如,网络应用程序中,可以使用线程处理多种连接器。


QThread 继承自 QObject,并且提供 QMutex 来实现同步。线程和进程共享全局变量,可以使用互斥体对改变后的全局变量值实现同步。例如,聊天程序中出现新的连接器或关闭连接时,如果改变连接的用户挂载值的同时浏览了其他进程的挂载值,可能会在访问网络的用户间传递错误数据。因此,必须编辑全局数据时,使用互斥体实现同步,其他进程则不能改变或浏览全局变量值。


QThread 类继承自 QObject 类。因此,线程开始或结束的时候,QThread 类发生发送信号事件。信号与槽功能是 QThread 类从 QObject 类继承的,可以通过信号与槽处理开始或结束等操作,所以可以实现多线程。


如何创建和启动 QThread:

如果要创建线程,就必须继承 QThread 类。MyTread 使用成员函数 run()来实现线程启动。

class MyThread:public QThread{    Q_OBJECTprotected:    void run();}
void MyThread::run(){ //具体实现}
复制代码


QMutex:

QMutex 提供了类似锁定的功能。互斥体激活状态下,线程不能同时访问共享变量,必须在先访问的线程访问完成后,其他线程才可以继续访问,否则会造成程序的崩溃。


一个线程访问互斥体锁定的共享变量期间,如果其他线程也访问此共享变量,那么该线程将会一直处于休眠状态,直到正在访问的线程结束访问。这成为线程安全


使用 QMutex 保证线程安全:

class Counter{public:    Counter(){n=0;}        void increment(){QMutexLocker locker(&mutex); ++n}    void decrement(){QMutexLocker locker(&mutex); --n}    int value() const{QMutextLocker locker(&mutex); retuen n;}    private:    mutable QMutex mutex;    int n;}
复制代码


QMutexLock 类在构造函数中自动设置互斥体锁,调用最后一个析构函数则自动解锁。

发布于: 刚刚阅读数: 3
用户头像

YOLO.

关注

还未添加个人签名 2022-05-06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 线程 QThread_c++_YOLO._InfoQ写作社区