QMutexLocker的用法

**

QMutexLocker的用法

**
1、什么是QMutexLocker ?
答:QMutexLocker 是基于QMutex的便利类

2、为什么要引入QMutexLocker?
答:(1)QMutex的目的是保护一个对象、数据结构或者代码段,所以同一时间只有一个线程可以访问它。但是QMutex的操作很繁琐,并且容易出错,并且出错了调试很麻烦,因此使用QMutexLocker这个类就能很好的避免这个问题。
(2)QMutexLocker上锁,解锁的原理:在该局部变量被创建的时候上锁,当所在函数运行完毕后该QMutexLocker局部变量在栈中销毁掉,根据他自己的机制也就相对应的解锁了。

3、具体实现

//(1)定义类型
QMutexLocker(QMutex *mutex)
// 首先字头文件(.h)中做如下声明
QMutex local_mutex;
// 其次在(.cpp)文件中需要用到位置如下上锁
QMutexLocker locker(&local_mutex); 
// 注:按照个人理解,根据定义,也可以在(.cpp)文件中需要用位置直接如下定义
QMutexLocker locker(QMutex *local_mutex);

在程序中的实现
Thread.h头文件

#include <QThread>
#include <QMutex>

extern int a;
// 声明 local_mutex
QMutex local_mutex;
 
class Thread : public QThread
{
public:
    Thread();
    ~Thread();
private:
    bool communicate_with_fpga_object_isstop_flag;

protected:
    void run();
};

thread.cpp文件

#include <thread.h>
Thread::Thread(QObject* parent):QObject(parent)
{ 
}
 
 
Thread::~Thread()
{
    QMutexLocker locker(&local_mutex);
    communicate_with_fpga_object_isstop_flag = true;
    quit();
    wait();

}
 
 
void Thread::run()
{
     {
         QMutexLocker locker(&local_mutex); 
         communicate_with_fpga_object_isstop_flag = false;
     }
     
    while (true)
    {
           QMutexLocker locker(&local_mutex);
         if(communicate_with_fpga_object_isstop_flag)
         {
             break;
         }

         if(local_read_fpga_packet_file_settings.isread_fpga_packet_from_file_flag)
         {
             if(isstart_read_fpga_packet_file_flag)
             {
                 getNextFpgaPacketFromFile();
                 Sleep(5);
             }
         }
         else
         {
             getNextFpgaPacketFromSerialPort();
         }
     }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值