Qt 信号量 QSemaphore Class 的翻译
关于 Qt QSemaphore class 的翻译
Qt 的 QSemaphore class 提供了一个通用的信号量(可以是单一的,也可以是数量多个的)的使用方法。
需要编辑环境添加:
Header: #include <QSemaphore>
qmake: QT += core
公共函数:
QSemaphore(int n = 0)
~QSemaphore()
void acquire(int n = 1)
int available() const
void release(int n = 1)
bool tryAcquire(int n = 1)
bool tryAcquire(int n, int timeout)
一些细节的描述:
1、信号量本质上是一个互斥锁(mutex),但是又有区别。
互斥锁只能锁一次,然而信号量可以多次。
打个比方,在早餐餐厅,大家要喝咖啡。如果用Mutex的方式,同时只有一个人可以使用咖啡机,他获得了咖啡机的使用权后,开始做咖啡,其他人只能在旁边等着,直到他做好咖啡后,另外一个人才能获得咖啡机的使用权。
如果用Semaphore的模式,服务员会把咖啡做好放到柜台上,谁想喝咖啡就拿走一杯,服务员会不断做咖啡,如果咖啡杯被拿光了,想喝咖啡的人就排队等着。
2、信号量典型的应用是在某些共享的资源上。
3、信号量支持两个基本的操作acquire() and release():
- acquire(n) :尝试获取n个资源,如果这些n个资源尚不可用,那么线程会一直阻塞直到资源可用为止。
- release(n):释放n个资源
- tryAcquire() 会立即返回资源是否可用
- available() 会返回当前有多少资源可用
例如:
QSemaphore sem(5); // sem.available() == 5sem.acquire(3); // sem.available() == 2
sem.acquire(2); // sem.available() == 0
sem.release(5); // sem.available() == 5
sem.release(5); // sem.available() == 10sem.tryAcquire(1); // sem.available() == 9, returns true
sem.tryAcquire(250); // sem.available() == 9, returns false
一个典型的关于信号量的应用,是共享环形缓存(循环队列)的使用,具体可以查看示例Semaphores Example。
打个比方,去餐厅就餐。信号量初始为餐厅的座位数,如果客人来了,想就餐。于是一位一位入座,剩余的座位就少了,available()返回的值就减少了。如果客离开了,那剩余的座位就多了,available()返回的值就增多了。那样就可以接待更多的客人了。
如果来了10个客人,而座位只有9个,那么这10个人需要等待。
但是具体处理时这样的:如果当时有5个座位空余,那么这10人中5人可以入座,剩余4人继续等待。
成员函数介绍:
QSemaphore::QSemaphore(int n = 0)
构建一个新的信号量,初始化资源数(类似上面提到的座位号)为0。
QSemaphore::~QSemaphore()
销毁信号量
void QSemaphore::acquire(int n = 1)
获取n个资源,默认为1,如果n>available(),线程将阻塞,一直等到足够的资源为止。
int QSemaphore::available() const
返回当前可用的资源
void QSemaphore::release(int n = 1)
释放n个资源,默认资源数为1
该函数还可以自动构建资源片
例如:
QSemaphore sem(5); // a semaphore that guards 5 resources
sem.acquire(5); // acquire all 5 resources
sem.release(5); // release the 5 resources
sem.release(10); // "create" 10 new resources
bool QSemaphore::tryAcquire(int n = 1)
尝试获取n个资源
例如:
QSemaphore sem(5); // sem.available() == 5
sem.tryAcquire(250); // sem.available() == 5, returns false
sem.tryAcquire(3); // sem.available() == 2, returns true
bool QSemaphore::tryAcquire(int n, int timeout)
尝试获取n个资源,超时时间为timeout
例如:
QSemaphore sem(5); // sem.available() == 5
sem.tryAcquire(250, 1000); // sem.available() == 5, waits 1000 milliseconds and returns false
sem.tryAcquire(3, 30000); // sem.available() == 2, returns true without waiting
Qt 中关于信号量的介绍就这些,本篇翻译结束。
Qt 信号量 QSemaphore Class 的翻译相关推荐
- Qt 2D painting Demo 的翻译
目录名字 Qt 2D painting Demo 的翻译 Helper Class 定义 Helper Class 的实现 Widget Class 定义 Widget Class 实现 GLWidg ...
- Qt 系统下的qm翻译文件
一.使用背景 如果,当你使用QMessageBox.QFileDialog等系统提供的方法时,可能打开的界面中有个控件提示信息未汉化. 其实,qt是提供的qm翻译文件的,所以我们可以使用它来进行翻译了 ...
- qt中制作添加 .ts 翻译文件
qt中制作添加 .ts 翻译文件 QT 中可以用其自身的工具对界面语言进行翻译,以实现支持语言的效果,这对于开发用户跨越语言区域的工具来说是一个特别实用的功能. 下面介绍怎么制作和使用qt的翻译文件: ...
- 在VS中实现QT的多国语言翻译
QT的多国语法翻译非常的实用,可以将开发完成的软件,直接翻译成另外一种语言,而不需要更改代码,也就是说一次开发可以同时发布多个语言版本的软件. 翻译过程 创建翻译文件:从代码中自动提取出能翻译的文本, ...
- python qt gui快速编程 pdf_翻译:《用python和Qt进行GUI编程》——介绍
介绍: 这本书讲的是如何利用Python和Qt来开发GUI应用程序的.仅仅需要一点点必备的知识:你可以使用一些面相对象的语言来编程,例如C++,C#,java或者python等等.在富文本编辑的那些章 ...
- qt信号量理解及使用
信号量可以理解为互斥量的延伸或者说是互斥量的泛化,一个互斥量只能锁一次,但信号量则可以获取多次,信号量经常在多线程或多进程中用来保护一定数量的共享资源,线程必须要获取一个信号量,举个例子: 有一个餐馆 ...
- Qt 并行计算 Concurrent Run的翻译
资料来源:https://doc.qt.io/qt-5/qtconcurrentrun.html Concurrent Run的简介: QtConcurrent::run() 是开启单独一个线程来运行 ...
- Qt下的国际化方法—翻译文件(.ts .qm文件)的使用
1.获取所需翻译的文本 在代码中需要翻译的文本的都需要用下面的方式使用 tr() 括起来. //创建菜单子项manageAction = new QAction(tr("vehicle ma ...
- 如何设置Qt程序软件的语言翻译(Qt自带翻译软件)
文章目录 01 - 目的和说明 02 - 过程步骤 03 - 链接分享 01 - 目的和说明 目的:可以由用户通过互斥按钮选择界面显示语言,中文或英文(如需要其它语言,则需要稍作修改). 说明 ...
最新文章
- ORA-12638: 身份证明检索失败 的解决办法
- 【洛谷 2709】小B的询问
- 问管理:不同时期,人员离职,项目怎么办?
- 解决:the selection is not within a valid module
- 7-4 是否同一棵二叉搜索树 (25 分)
- java 左移 返回值_java左移右移运算符详解
- 3条原则,16个小点,帮你写出一个优秀的对外接口!
- VSCode Debug
- 德国政府证实警方使用了 Pegasus 间谍软件
- 因被曝严重漏洞,Avast紧急禁用其 JavaScript 引擎
- 计算机二级试题java_计算机二级java精选试题及答案
- 创建三维零件的DH坐标系
- [1007]魔法少女小Scarlet(洛谷 P4924)
- 计算机键盘上范的怎么点击,微信怎么用键盘最小化 电脑最小化键盘怎么按
- 皮卡丘python turtle海龟绘图(电力球版)附源代码
- 寻找四叶草HTML5小游戏,寻找四叶草作文(8篇)
- Json转对象失败:No suitable constructor found for type [simple type, class com.test.faster.domain.respons
- linux线程亲和性,线程亲和性
- 【SQL监控】SQL完全监控的脚本
- Flutter:WebView和H5通信
热门文章
- 论文阅读:Network In Network
- [云炬创业基础笔记]第六章商业模式测试24
- [云炬创业基础笔记]第六章商业模式测试14
- 十二、“最是真心藏不住,一言一语总关情。”(2021.2.11)
- 解决Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz国内下载速度缓慢的问题
- python加粗_python – 设置为使用标记加粗选定的文本
- OpenGL编程指南13:光源移动
- PriorityQueue源码解析
- C语言再学习 -- Linux 中常用基本命令
- Leetcode-最长回文子串(5)