<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # QSystemSemaphore Class Reference ## [[QtCore](index.htm) module] 該QSystemSemaphore類提供了一個通用的計數系統信號量。[More...](#details) ### Types * `enum AccessMode { Open, Create }` * `enum SystemSemaphoreError { NoError, PermissionDenied, KeyError, AlreadyExists, ..., UnknownError }` ### Methods * `__init__ (self, QString?key, int?initialValue?=?0, AccessMode?mode?=?QSystemSemaphore.Open)` * `bool acquire (self)` * `SystemSemaphoreError error (self)` * `QString errorString (self)` * `QString key (self)` * `bool release (self, int?n?=?1)` * `setKey (self, QString?key, int?initialValue?=?0, AccessMode?mode?=?QSystemSemaphore.Open)` * * * ## Detailed Description 該QSystemSemaphore類提供了一個通用的計數系統信號量。 信號量是互斥的推廣。當一個互斥可以鎖定只有一次,一個信號可以被收購多次。通常情況下,一個信號是用來保護一定數量的相同的資源。 像它的對手更輕[QSemaphore](qsemaphore.html),一個QSystemSemaphore可以從多個被訪問[threads](qthread.html)。不像[QSemaphore](qsemaphore.html),一個QSystemSemaphore可以從多個也可以訪問[processes](qprocess.html)。這意味著QSystemSemaphore是一個更重的類,所以如果你的應用程序并不需要訪問多個進程的信號量,你可能會想使用[QSemaphore](qsemaphore.html)。 信號量支持兩種基本操作,[acquire](qsystemsemaphore.html#acquire)()和[release](qsystemsemaphore.html#release)(): [acquire](qsystemsemaphore.html#acquire)( )試圖獲取一個資源。如果沒有資源可用,呼叫阻塞,直到一個資源變為可用。然后,資源獲取和調用返回。 [release](qsystemsemaphore.html#release)( )釋放一個資源,因此它可以被其他進程獲得。該功能也可以被稱為具有參數n \u003e 1時,它釋放N個資源。 系統信號與一個字符串鍵創建其他進程可以使用使用相同的信號。 例如:創建一個系統信號量 ``` QSystemSemaphore sem("market", 3, QSystemSemaphore.Create); // resources available == 3 sem.acquire(); // resources available == 2 sem.acquire(); // resources available == 1 sem.acquire(); // resources available == 0 sem.release(); // resources available == 1 sem.release(2); // resources available == 3 ``` 系統的信號量的一個典型應用是用于控制訪問環形緩沖器由一個生產者進程共享和消費者的過程。 ### Platform-Specific Behavior 當使用這個類時,請注意以下平臺的差異: **Windows:**QSystemSemaphore并不擁有其底層的系統semaphore 。窗口擁有它。這意味著,當QSystemSemaphore針對特定鍵的所有實例都被摧毀,要么有自己的析構函數被調用,或者因為一個或多個進程崩潰時,Windows將刪除底層的系統semaphore 。 **Unix:** * QSystemSemaphore owns the underlying system semaphore in Unix systems. This means that the last process having an instance of QSystemSemaphore for a particular key must remove the underlying system semaphore in its destructor. If the last process crashes without running the QSystemSemaphore destructor, Unix does not automatically remove the underlying system semaphore, and the semaphore survives the crash. A subsequent process that constructs a QSystemSemaphore with the same key will then be given the existing system semaphore. In that case, if the QSystemSemaphore constructor has specified its [access mode](qsystemsemaphore.html#AccessMode-enum) as [Open](qsystemsemaphore.html#AccessMode-enum), its initial resource count will not be reset to the one provided but remain set to the value it received in the crashed process. To protect against this, the first process to create a semaphore for a particular key (usually a server), must pass its [access mode](qsystemsemaphore.html#AccessMode-enum) as [Create](qsystemsemaphore.html#AccessMode-enum), which will force Unix to reset the resource count in the underlying system semaphore. * When a process using QSystemSemaphore terminates for any reason, Unix automatically reverses the effect of all acquire operations that were not released. Thus if the process acquires a resource and then exits without releasing it, Unix will release that resource. * Symbian: QSystemSemaphore behaves the same as Windows semaphores. In other words, the operating system owns the semaphore and ignores [QSystemSemaphore.AccessMode](qsystemsemaphore.html#AccessMode-enum). * * * ## Type Documentation ``` QSystemSemaphore.AccessMode ``` 此枚舉所使用的構造函數和[setKey](qsystemsemaphore.html#setKey)( ) 。其目的是使處理問題在崩潰的生存信號量的Unix實現。在Unix中,當信號量生存崩潰,我們需要一種方法來迫使它重新設置它的資源數,當系統重新使用信號量。在Windows和Symbian的,其中信號量不能崩潰生存,此枚舉有沒有效果。 | Constant | Value | Description | | --- | --- | --- | | `QSystemSemaphore.Open` | `0` | 如果信號量已經存在,它的初始資源計數不復位。如果信號量不存在,則創建它和它的初始資源計數設置。 | | `QSystemSemaphore.Create` | `1` | [QSystemSemaphore](qsystemsemaphore.html)采用信號量的所有權,并將其資源數量為請求值,不管信號是否已經存在了有倖存崩潰。此值應傳遞給構造函數,當第一個信號為一個特定的鍵構造,你知道,如果信號量已經存在,它只能是因為撞車。在Windows和Symbian的,其中一個信號量不能崩潰生存,創建并打開具有相同的行為。 | ``` QSystemSemaphore.SystemSemaphoreError ``` | Constant | Value | Description | | --- | --- | --- | | `QSystemSemaphore.NoError` | `0` | 未發生錯誤。 | | `QSystemSemaphore.PermissionDenied` | `1` | 操作失敗,因為調用方沒有所需的權限。 | | `QSystemSemaphore.KeyError` | `2` | 操作失敗,因為一個無效的關鍵。 | | `QSystemSemaphore.AlreadyExists` | `3` | 操作失敗,因為具有指定鍵的系統信號量已經存在。 | | `QSystemSemaphore.NotFound` | `4` | 操作失敗,因為具有指定鍵的系統信號量不能被發現。 | | `QSystemSemaphore.OutOfResources` | `5` | 操作失敗,因為沒有足夠的可用內存來滿足該請求。 | | `QSystemSemaphore.UnknownError` | `6` | 別的事情發生了,這是不好的。 | * * * ## Method Documentation ``` QSystemSemaphore.__init__ (self, QString?key, int?initialValue?=?0, AccessMode?mode?=?QSystemSemaphore.Open) ``` 請求系統信號燈指定_key_。參數_initialValue_和_mode_根據下面的規則,這是依賴于系統的使用。 在Unix中,如果_mode_ is [Open](qsystemsemaphore.html#AccessMode-enum)并且系統已經由一個信號量_key_,該信號被使用,并且信號量的資源計數不改變,即_initialValue_被忽略。但如果系統中還沒有確定的一個信號_key_,它會為重點的新信號量,并設置其資源計數_initialValue_。 在Unix中,如果_mode_ is [Create](qsystemsemaphore.html#AccessMode-enum)并且系統已經由一個信號量_key_,該信號被使用,并且其資源計數設置為_initialValue_。如果系統中還沒有確定的一個信號_key_,它會為重點的新信號量,并設置其資源計數_initialValue_。 在QNX ,如果_mode_ is [Create](qsystemsemaphore.html#AccessMode-enum)并且系統已經由一個信號量_key_,該信號量將被刪除,新的人會與資源計數設置為密鑰創建_initialValue_。 在Windows和Symbian的,_mode_被忽略,系統總是試圖創建一個信號量指定_key_。如果系統中還沒有確定為一個信號_key_,它創建了信號量,并設置其資源計數_initialValue_。但是,如果系統中已經有確定的信號_key_它使用信號量,而忽略_initialValue_。 該[mode](qsystemsemaphore.html#AccessMode-enum)參數只適用于Unix系統,以處理一個信號量生存進程崩潰的情況。在這種情況下,下一個進程分配一個信號具有相同的_key_將獲得生還的信號,除非_mode_ is [Create](qsystemsemaphore.html#AccessMode-enum),資源計數不會被重置_initialValue_但將保留它已由墜毀過程中給出的初始值。 **See also** [acquire](qsystemsemaphore.html#acquire)()和[key](qsystemsemaphore.html#key)( ) 。 ``` bool QSystemSemaphore.acquire (self) ``` 獲取通過這個信號量把守的資源之一,如果有一個可用的,則返回True 。如果把這個信號量把守的資源已被收購,呼叫阻塞,直到其中一人被釋放由另一個進程或具有相同的密鑰信號量的線程。 如果返回False ,表示發生了系統錯誤。通話[error](qsystemsemaphore.html#error)()來得到一個值[QSystemSemaphore.SystemSemaphoreError](qsystemsemaphore.html#SystemSemaphoreError-enum)指示發生錯誤。 **See also** [release](qsystemsemaphore.html#release)( ) 。 ``` SystemSemaphoreError QSystemSemaphore.error (self) ``` [ 返回一個值,指示是否發生了錯誤,并且,如果是這樣,這是其中的錯誤。 ](qsystemsemaphore.html#SystemSemaphoreError-enum) [**See also**](qsystemsemaphore.html#SystemSemaphoreError-enum) [errorString](qsystemsemaphore.html#errorString)( ) 。 ``` QString QSystemSemaphore.errorString (self) ``` 返回上次發生錯誤的文本說明。如果[error](qsystemsemaphore.html#error)( )返回一個[error value](qsystemsemaphore.html#SystemSemaphoreError-enum),調用這個函數來獲取描述錯誤的文本字符串。 **See also** [error](qsystemsemaphore.html#error)( ) 。 ``` QString QSystemSemaphore.key (self) ``` 返回分配給本系統信號量的關鍵。最關鍵的是通過它的信號可以從其他進程訪問的名稱。 **See also** [setKey](qsystemsemaphore.html#setKey)( ) 。 ``` bool QSystemSemaphore.release (self, int?n?=?1) ``` 發布_n_資源的信號量把守。返回True除非有一個系統錯誤。 例如:創建有五個資源的系統信號量,獲取所有這些,然后釋放它們。 ``` [QSystemSemaphore](qsystemsemaphore.html) sem("market", 5, [QSystemSemaphore](qsystemsemaphore.html).Create); sem.acquire(5); // acquire all 5 resources sem.release(5); // release the 5 resources ``` 此功能還可以“創造”的資源。例如,馬上上述聲明的順序如下,假設我們添加語句: ``` sem.release(10); // "create" 10 new resources ``` 十大新的資源現在由信號量把守,除了已經存在的五個。你通常不會使用這個函數來創建更多的資源。 **See also** [acquire](qsystemsemaphore.html#acquire)( ) 。 ``` QSystemSemaphore.setKey (self, QString?key, int?initialValue?=?0, AccessMode?mode?=?QSystemSemaphore.Open) ``` 此功能的工作方式相同的構造。它這個重構[QSystemSemaphore](qsystemsemaphore.html)對象。如果新的_key_是從舊的密鑰不同,調用這個函數就像調用與舊的密鑰信號的析構函數,然后調用構造函數來創建一個新的信號量與新_key_。該_initialValue_和_mode_參數的定義與構造。 **See also** [QSystemSemaphore](qsystemsemaphore.html#QSystemSemaphore)()和[key](qsystemsemaphore.html#key)( ) 。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看