Qt | 线程 QThread
前言:
Qt 中的 QThread 类用来进行多任务的处理。线程可以做到单个进程做不到的事情。例如,网络应用程序中,可以使用线程处理多种连接器。
QThread 继承自 QObject,并且提供 QMutex 来实现同步。线程和进程共享全局变量,可以使用互斥体对改变后的全局变量值实现同步。例如,聊天程序中出现新的连接器或关闭连接时,如果改变连接的用户挂载值的同时浏览了其他进程的挂载值,可能会在访问网络的用户间传递错误数据。因此,必须编辑全局数据时,使用互斥体实现同步,其他进程则不能改变或浏览全局变量值。
QThread 类继承自 QObject 类。因此,线程开始或结束的时候,QThread 类发生发送信号事件。信号与槽功能是 QThread 类从 QObject 类继承的,可以通过信号与槽处理开始或结束等操作,所以可以实现多线程。
如何创建和启动 QThread:
如果要创建线程,就必须继承 QThread 类。MyTread 使用成员函数 run()来实现线程启动。
QMutex:
QMutex 提供了类似锁定的功能。互斥体激活状态下,线程不能同时访问共享变量,必须在先访问的线程访问完成后,其他线程才可以继续访问,否则会造成程序的崩溃。
一个线程访问互斥体锁定的共享变量期间,如果其他线程也访问此共享变量,那么该线程将会一直处于休眠状态,直到正在访问的线程结束访问。这成为线程安全。
使用 QMutex 保证线程安全:
QMutexLock 类在构造函数中自动设置互斥体锁,调用最后一个析构函数则自动解锁。
版权声明: 本文为 InfoQ 作者【YOLO.】的原创文章。
原文链接:【http://xie.infoq.cn/article/604df938aa5f05195a319915f】。未经作者许可,禁止转载。
评论