Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QSemaphore类提供了一个通用的计数信号量。More...
该QSemaphore类提供了一个通用的计数信号量。
信号量是互斥的推广。当一个互斥只能被锁定一次,有可能获得一个信号量多次。信号量是通常用于保护一定数量的相同的资源。
信号量支持两种基本操作,acquire()和release():
还有一个tryAcquire( )函数立即返回,如果它不能获得资源,以及available()函数,返回可用资源的数量在任何时间。
例如:
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
信号量的一个典型应用是用于控制访问环形缓冲器由一个生产者线程和消费者线程共享。该Semaphores示例显示了如何使用QSemaphore来解决这个问题。
信号量的非计算例子是在餐厅用餐。信号量与椅子在餐厅数初始化。当人们到达时,他们想要一个座位。由于座位填满,available( )递减。随着人们离开,available( )递增,让更多的人进入。如果10人一方想坐下,但只有9个座位,这10人将等待,但4人一党会坐下(以可用座位5 ,使得10人的派对等待更长的时间) 。
创建一个新的信号量并初始化它扼守资源的数量n(默认为0 ) 。
See also release()和available( ) 。
试图获取n资源的信号量把守。如果n\u003eavailable( ) ,这个调用将阻塞直到有足够的资源可用。
See also release( )available()和tryAcquire( ) 。
返回资源的当前可用的信号的数目。这个号码永远不能否定的。
See also acquire()和release( ) 。
发布n资源的信号量把守。
此功能可用于“创造”的资源也是如此。例如:
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
See also acquire()和available( ) 。
试图获取n资源把守的信号,并成功返回True 。如果available()\u003cn,这个调用会立即返回False不获取任何资源。
例如:
QSemaphore sem(5); // sem.available() == 5 sem.tryAcquire(250); // sem.available() == 5, returns false sem.tryAcquire(3); // sem.available() == 2, returns true
See also acquire( ) 。
试图获取n资源把守的信号,并成功返回True 。如果available()\u003cn,这个调用会等待最多timeout毫秒资源变为可用。
注意:传递一个负数作为timeout相当于调用acquire( ) ,即该函数将一直等待资源变为可用,如果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
See also acquire( ) 。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |