qt QSemaphore

Posted 封兴旺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt QSemaphore相关的知识,希望对你有一定的参考价值。

QSemaphore: 一个通用的可计数的信号量,信号量实际上就是广义的互斥量。一个互斥量只能被锁定一次,然而一个信号量可以被获取多次。信号量常被用于保护一定数目的同类资源。

基本操作:

QSemaphore::QSemaphore ( int n = 0 ) : 新建一个信号量,守护的资源数为n(默认为0)

QSemaphore::~QSemaphore ():销毁信号量警告:销毁一个正在使用的信号量将导致一个不确定的行为

int QSemaphore::available() const :用于返回可用资源的数目

void QSemaphore::acquire ( int n = 1 ):从该信号量守护的资源中获取n个资源。如果获取的资源数目大于available()返回值,那么自己将阻塞,直到可获取足够的资源数

void QSemaphore::release ( int n = 1 ):释放n个信号量守护的资源给信号量。该函数也可以用来增加一个信号量可使用的资源数目

bool QSemaphore::tryAcquire ( int n = 1 ):尝试从信号量守护的资源中获取n个资源。成功,则返回true。如果当前可用的资源数目不够立即返回,返回值为false,并且不占用任何资源

bool QSemaphore::tryAcquire ( int n, int timeout ):尝试从信号量守护的资源中获取n个资源。成功,则返回true。如果当前可用的资源数目available()不够,将等待timeout微秒。

例子:

QSemaphore sem(5); // sem.available() == 5
sem.acquire(3); // sem.available() == 2
sem.acquire(2); // sem.available() == 0
sem.release(5); // sem.available() == 5
sem.release(5); // sem.available() == 10
sem.tryAcquire(1); // sem.available() == 9, returns true
sem.tryAcquire(250); // sem.available() == 9, returns false

 

以上是关于qt QSemaphore的主要内容,如果未能解决你的问题,请参考以下文章

Qt同步线程(QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition )

Qt同步线程(比较清楚,而且QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition 每个都有例子)

QT 信号量QSemaphore的使用

Qt基础之十四:线程同步

Qt基础之十四:线程同步

Qt线程的简单使用系列