您的位置:首页 > 科技 > IT业 > 天津建设工程信息网中标公告_ueeshop建站靠谱吗_站长工具seo源码_百度图片识别在线使用

天津建设工程信息网中标公告_ueeshop建站靠谱吗_站长工具seo源码_百度图片识别在线使用

2025/4/4 5:02:34 来源:https://blog.csdn.net/LoveXming/article/details/146912552  浏览:    关键词:天津建设工程信息网中标公告_ueeshop建站靠谱吗_站长工具seo源码_百度图片识别在线使用
天津建设工程信息网中标公告_ueeshop建站靠谱吗_站长工具seo源码_百度图片识别在线使用

Qt 信号量使用方法

QSemaphore 类

常用函数介绍

函数名称函数功能
QSemaphore()构造并初始化对象
acquire()尝试获取n个资源,如果没有那么多资源,线程将阻塞直到有n个资源可用
available()返回当前信号量可用的资源个数,这个数永远不可能为负数,如果为0,就说明当前没有资源可用
release()释放n个资源,如果信号量的资源已全部可用之后再释放,就可以创建更多的资源,增加可用资源的个数
tryAcquire()尝试获取n个资源,不成功时不阻塞线程

程序示例

五个车位,十辆车抢占,先占的占用3秒,然后让出车位

// 公共数据和信号量对象
struct TestData
{static bool m_sData[5];static QSemaphore m_sSemaphore;
};bool TestData::m_sData[5] = { false, false, false, false, false };
QSemaphore TestData::m_sSemaphore(5);// 线程类
class MyThread : public QThread
{
public:MyThread(int nId, QObject *parent = nullptr);~MyThread() = default;protected:void run() override{TestData::m_sSemaphore.acquire(1);		// 请求一个资源int nIndex = -1;for (int i = 0; i != 5; ++i){if (!TestData::m_sData[i]){TestData::m_sData[i] = true;nIndex = i;break;}}if (nIndex > -1){qDebug() << m_nId << QString::fromLocal8Bit("号车占用") << nIndex << QString::fromLocal8Bit("号车位");QThread::msleep(3000);TestData::m_sData[nIndex] = false;TestData::m_sSemaphore.release();		// 释放一个资源}}private:int m_nId;
};MyThread::MyThread(int nId, QObject *parent) : QThread(parent), m_nId(nId)
{}// 测试函数
void Test()
{MyThread* carArrThread[10];for (int i = 0; i != 10; ++i){carArrThread[i] = new MyThread(i);carArrThread[i]->start();}for (int i = 0; i != 10; ++i){carArrThread[i]->wait();delete  carArrThread[i];}
}

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com