您当前的位置: 首页 > 

lw只吃亿点.

暂无认证

  • 7浏览

    0关注

    47博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QSemaphore的使用+QSemaphore实现循环输出ABC(含源码+注释)

lw只吃亿点. 发布时间:2022-03-19 23:39:06 ,浏览量:7

文章目录
  • 一、QSemaphore使用示例图
    • 1.1 QSemaphore基本使用示例图
    • 2.2 QSemaphore循环输出ABC示例图
  • 二、信号量、QSemaphore(个人理解)
  • 三、QSemaphore的基本使用(源码)
    • 3.1 CThread定义类
    • 3.2 CMainWindow调用类
  • 四、QSemaphore实现循环输出ABC
    • 4.1 CThread定义类
    • 4.2 CMainWindow调用类
  • 总结
  • 相关文章

一、QSemaphore使用示例图 1.1 QSemaphore基本使用示例图

下图为信号量的基本使用示例图,每点击一次按钮则创建一个资源,源码在本文第三节(源码含详细注释)。 在这里插入图片描述

2.2 QSemaphore循环输出ABC示例图

下图为信号量的基本使用示例图,点击启动线程则开始循环输出ABC,源码在本文第四节 在这里插入图片描述

二、信号量、QSemaphore(个人理解)

了解生产者消费者模型(一种设计模式)的会发现信号量和该设计模型有一定类似。顾名思义生产者消费者模型是生产者生产资源,消费者消费资源;而信号量就像如此,存在生产资源和消费资源的情况,生产资源使用release函数,消费资源使用acquire函数(并且可以指定生产和消费的资源个数)

三、QSemaphore的基本使用(源码) 3.1 CThread定义类

CThread.h

#ifndef CTHREAD_H
#define CTHREAD_H

#include 
#include 
#include 

class CThread : public QThread
{
    Q_OBJECT
public:
    explicit CThread(QObject *parent = nullptr);
    ~CThread();
    void run();
    QSemaphore *sem() const;

private:
    QSemaphore * m_sem; //定义一个信号量指针
};

#endif // CTHREAD_H

CThread.cpp

#include "CThread.h"
#include 

CThread::CThread(QObject *parent)
    : QThread(parent)
{
    m_sem = new QSemaphore; //new出信号量,在创建信号量时可指定一个int值为初始已存在的资源数
}

CThread::~CThread()
{
    delete m_sem;
}

void CThread::run()
{
    int i = 0;
    while(i++ != 3)
    {
        m_sem->acquire();   //获取一个资源,当资源不够时将阻塞,直到资源足够
        //输出线程id并显示i值
        qDebug() wait(1);
        delete thread;
    }
    delete ui;
}

void CMainWindow::on_startBtn_clicked()
{
    //启动三个线程
    m_threadList[0]->start();
    m_threadList[1]->start();
    m_threadList[2]->start();
}
总结

信号量相对互斥锁来说会简单一点,个人感觉信号量和生产者消费者模型非常类似,理解起来也相对简单。因为我信号量使用较少,目前就总结这点叭

相关文章

启动QThread线程的两种方法(含源码+注释) Qt互斥锁(QMutex)、条件变量(QWaitCondition)讲解+QMutex实现多线程循环输出ABC(含源码+注释) Qt互斥锁(QMutex)的使用、QMutexLocker的使用(含源码+注释) QRunnable线程、QThreadPool(线程池)的使用(含源码+注释) Qt读写锁(QReadWriteLock)的使用、读写锁的验证(含源码+注释) Qt读写锁(QWriteLocker、QReadLocker)的理解和使用(含部分源码) Qt之线程运行指定函数(含源码+注释,优化速率)

友情提示——哪里看不懂可私哦,让我们一起互相进步吧 (创作不易,请留下一个免费的赞叭 谢谢 ^o^/)

注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。 注:如有侵权,请联系作者删除

关注
打赏
1654352885
查看更多评论
立即登录/注册

微信扫码登录

0.0583s