关于 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 的翻译相关推荐

  1. Qt 2D painting Demo 的翻译

    目录名字 Qt 2D painting Demo 的翻译 Helper Class 定义 Helper Class 的实现 Widget Class 定义 Widget Class 实现 GLWidg ...

  2. Qt 系统下的qm翻译文件

    一.使用背景 如果,当你使用QMessageBox.QFileDialog等系统提供的方法时,可能打开的界面中有个控件提示信息未汉化. 其实,qt是提供的qm翻译文件的,所以我们可以使用它来进行翻译了 ...

  3. qt中制作添加 .ts 翻译文件

    qt中制作添加 .ts 翻译文件 QT 中可以用其自身的工具对界面语言进行翻译,以实现支持语言的效果,这对于开发用户跨越语言区域的工具来说是一个特别实用的功能. 下面介绍怎么制作和使用qt的翻译文件: ...

  4. 在VS中实现QT的多国语言翻译

    QT的多国语法翻译非常的实用,可以将开发完成的软件,直接翻译成另外一种语言,而不需要更改代码,也就是说一次开发可以同时发布多个语言版本的软件. 翻译过程 创建翻译文件:从代码中自动提取出能翻译的文本, ...

  5. python qt gui快速编程 pdf_翻译:《用python和Qt进行GUI编程》——介绍

    介绍: 这本书讲的是如何利用Python和Qt来开发GUI应用程序的.仅仅需要一点点必备的知识:你可以使用一些面相对象的语言来编程,例如C++,C#,java或者python等等.在富文本编辑的那些章 ...

  6. qt信号量理解及使用

    信号量可以理解为互斥量的延伸或者说是互斥量的泛化,一个互斥量只能锁一次,但信号量则可以获取多次,信号量经常在多线程或多进程中用来保护一定数量的共享资源,线程必须要获取一个信号量,举个例子: 有一个餐馆 ...

  7. Qt 并行计算 Concurrent Run的翻译

    资料来源:https://doc.qt.io/qt-5/qtconcurrentrun.html Concurrent Run的简介: QtConcurrent::run() 是开启单独一个线程来运行 ...

  8. Qt下的国际化方法—翻译文件(.ts .qm文件)的使用

    1.获取所需翻译的文本 在代码中需要翻译的文本的都需要用下面的方式使用 tr() 括起来. //创建菜单子项manageAction = new QAction(tr("vehicle ma ...

  9. 如何设置Qt程序软件的语言翻译(Qt自带翻译软件)

    文章目录 01 - 目的和说明 02 - 过程步骤 03 - 链接分享 01 - 目的和说明   目的:可以由用户通过互斥按钮选择界面显示语言,中文或英文(如需要其它语言,则需要稍作修改).   说明 ...

最新文章

  1. ORA-12638: 身份证明检索失败 的解决办法
  2. 【洛谷 2709】小B的询问
  3. 问管理:不同时期,人员离职,项目怎么办?
  4. 解决:the selection is not within a valid module
  5. 7-4 是否同一棵二叉搜索树 (25 分)
  6. java 左移 返回值_java左移右移运算符详解
  7. 3条原则,16个小点,帮你写出一个优秀的对外接口!
  8. VSCode Debug
  9. 德国政府证实警方使用了 Pegasus 间谍软件
  10. 因被曝严重漏洞,Avast紧急禁用其 JavaScript 引擎
  11. 计算机二级试题java_计算机二级java精选试题及答案
  12. 创建三维零件的DH坐标系
  13. [1007]魔法少女小Scarlet(洛谷 P4924)
  14. 计算机键盘上范的怎么点击,微信怎么用键盘最小化 电脑最小化键盘怎么按
  15. 皮卡丘python turtle海龟绘图(电力球版)附源代码
  16. 寻找四叶草HTML5小游戏,寻找四叶草作文(8篇)
  17. Json转对象失败:No suitable constructor found for type [simple type, class com.test.faster.domain.respons
  18. linux线程亲和性,线程亲和性
  19. 【SQL监控】SQL完全监控的脚本
  20. Flutter:WebView和H5通信

热门文章

  1. 论文阅读:Network In Network
  2. [云炬创业基础笔记]第六章商业模式测试24
  3. [云炬创业基础笔记]第六章商业模式测试14
  4. 十二、“最是真心藏不住,一言一语总关情。”(2021.2.11)
  5. 解决Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz国内下载速度缓慢的问题
  6. python加粗_python – 设置为使用标记加粗选定的文本
  7. OpenGL编程指南13:光源移动
  8. PriorityQueue源码解析
  9. C语言再学习 -- Linux 中常用基本命令
  10. Leetcode-最长回文子串(5)