• PySide 模块
  • PySide.QtCore
  • 内容表

    上一话题

    QWaitCondition

    下一话题

    QWriteLocker

    QSemaphore

    概要

    函数

    详细描述

    PySide.QtCore.QSemaphore class provides a general counting semaphore.

    信号量是互斥的泛化。尽管互斥只可以被锁定一次,但多次获得信号量是可能的。信号量通常用于保护一定数量的恒等资源。

    信号量支持 2 基础操作 PySide.QtCore.QSemaphore.acquire() and PySide.QtCore.QSemaphore.release() :

    • acquire( n ) 试着获得 n 资源。若没有那么多可用资源,调用将阻塞直到是这种情况。
    • release( n ) 释放 n 资源。

    还有 PySide.QtCore.QSemaphore.tryAcquire() function that returns immediately if it cannot acquire the resources, and an PySide.QtCore.QSemaphore.available() function that returns the number of available resources at any time.

    范例:

    sem = QSemaphore(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 example shows how to use PySide.QtCore.QSemaphore to solve that problem.

    信号量的非计算范例是在餐馆用餐。采用餐厅中的椅子数初始信号量。当人们到达时,他们想要座位。由于座无虚席, PySide.QtCore.QSemaphore.available() is decremented. As people leave, the PySide.QtCore.QSemaphore.available() is incremented, allowing more people to enter. If a party of 10 people want to be seated, but there are only 9 seats, those 10 people will wait, but a party of 4 people would be seated (taking the available seats to 5, making the party of 10 people wait longer).

    class PySide.QtCore. QSemaphore ( [ n=0 ] )
    参数: n PySide.QtCore.int

    Creates a new semaphore and initializes the number of resources it guards to n (by default, 0).

    PySide.QtCore.QSemaphore. acquire ( [ n=1 ] )
    参数: n PySide.QtCore.int

    Tries to acquire n resources guarded by the semaphore. If n > PySide.QtCore.QSemaphore.available() , this call will block until enough resources are available.

    PySide.QtCore.QSemaphore. available ( )
    返回类型: PySide.QtCore.int

    Returns the number of resources currently available to the semaphore. This number can never be negative.

    PySide.QtCore.QSemaphore. release ( [ n=1 ] )
    参数: n PySide.QtCore.int

    发行 n resources guarded by the semaphore.

    This function can be used to “create” resources as well. For example:

    sem = QSemaphore(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
    											
    PySide.QtCore.QSemaphore. tryAcquire ( [ n=1 ] )
    参数: n PySide.QtCore.int
    返回类型: PySide.QtCore.bool

    Tries to acquire n resources guarded by the semaphore and returns true on success. If PySide.QtCore.QSemaphore.available() < n , this call immediately returns false without acquiring any resources.

    范例:

    sem = QSemaphore(5)      # sem.available() == 5
    sem.tryAcquire(250)      # sem.available() == 5, returns false
    sem.tryAcquire(3)        # sem.available() == 2, returns true
    											
    PySide.QtCore.QSemaphore. tryAcquire ( n , timeout )
    参数:
    • n PySide.QtCore.int
    • timeout PySide.QtCore.int
    返回类型:

    PySide.QtCore.bool

    Tries to acquire n resources guarded by the semaphore and returns true on success. If PySide.QtCore.QSemaphore.available() < n , this call will wait for at most timeout milliseconds for resources to become available.

    Note: Passing a negative number as the timeout is equivalent to calling PySide.QtCore.QSemaphore.acquire() , i.e. this function will wait forever for resources to become available if timeout is negative.

    范例:

    sem = QSemaphore(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