共用方式為


CreateSemaphoreExW 函式 (synchapi.h)

建立或開啟具名或未命名的號誌物件,並傳回物件的句柄。

語法

HANDLE CreateSemaphoreExW(
  [in, optional] LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  [in]           LONG                  lInitialCount,
  [in]           LONG                  lMaximumCount,
  [in, optional] LPCWSTR               lpName,
                 DWORD                 dwFlags,
  [in]           DWORD                 dwDesiredAccess
);

參數

[in, optional] lpSemaphoreAttributes

SECURITY_ATTRIBUTES 結構的指標。 如果此參數為 NULL,子進程就無法繼承號號句柄。

結構的 lpSecurityDescriptor 成員會指定新旗號的安全性描述元。 如果此參數為 NULL,則號志會取得預設的安全性描述元。 旗號的預設安全性描述元中的 ACL 來自建立者的主要或模擬令牌。

[in] lInitialCount

號誌物件的初始計數。 此值必須大於或等於零,且小於或等於 lMaximumCount。 當號誌的計數大於零,且當其為零時,表示號誌的狀態。 每當等候函式釋放等候號誌的線程時,計數就會減少一。 計數會藉由呼叫 ReleaseSemaphore 函式來增加指定的數量。

[in] lMaximumCount

號誌物件的計數上限。 這個值必須大於零。

[in, optional] lpName

指定號誌物件名稱之 Null 終止字串的指標。 名稱限制為 MAX_PATH 個字元。 名稱比較區分大小寫。

如果 lpName 符合現有具名號誌對象的名稱,則會忽略 lInitialCountlMaximumCount 參數,因為它們已經由建立程式設定。 如果 lpSemaphoreAttributes 參數不是 NULL,它會判斷是否可以繼承句柄。

如果 lpNameNULL,則會在沒有名稱的情況下建立號誌物件。

如果 lpName 符合現有事件、mutex、可等候定時器、作業或檔案對應對象的名稱,則函式會失敗,而且 GetLastError 函 式會 傳回ERROR_INVALID_HANDLE。 這是因為這些對象共用相同的命名空間。

名稱可以有 「Global」 或 「Local」 前置詞,以在全域或會話命名空間中明確建立物件。 名稱的其餘部分可以包含反斜杠字元 (\) 以外的任何字元。 如需詳細資訊,請參閱 核心物件命名空間。 使用終端機服務會話實作快速使用者切換。 核心物件名稱必須遵循終端機服務概述的指導方針,讓應用程式可以支援多個使用者。

物件可以在私用命名空間中建立。 如需詳細資訊,請參閱 物件命名空間

dwFlags

此參數是保留的,而且必須是 0。

[in] dwDesiredAccess

號誌物件的存取遮罩。 如需訪問許可權的清單,請參閱 同步處理物件安全性和訪問許可權

傳回值

如果函式成功,則傳回值是號誌物件的句柄。 如果具名號誌物件存在於函數調用之前,函式會傳回現有物件的句柄,而 GetLastError傳回ERROR_ALREADY_EXISTS

如果函式失敗,傳回值為 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

當號誌物件的計數大於零,而且當其計數等於零時,就會發出訊號。 lInitialCount 參數會指定初始計數。 計數永遠不能小於零或大於 lMaximumCount 參數中指定的值。

呼叫進程的任何線程都可以在呼叫其中一個 等候函式中指定信號物件句柄。 當指定物件的狀態收到訊號時,單一物件等候函式會傳回。 當有任何物件或發出所有指定物件的訊號時,可以指示多物件等候函式傳回。 等候函式傳回時,會釋放等候線程以繼續執行。 每次線程完成等候號誌物件時,號誌物件的計數會遞減一。 線程完成時,它會呼叫 ReleaseSemaphore 函式,以遞增號誌物件的計數。

多個進程可以有相同號誌物件的句柄,讓對象能夠用於進程間同步處理。 下列物件共享機制可供使用:

  • 如果 CreateSemaphoreExlpSemaphoreAttributes 參數已啟用繼承,CreateProcess 函式所建立的子進程可以繼承旗號物件的句柄。
  • 進程可以在呼叫 DuplicateHandle 函式時指定旗號物件句柄,以建立另一個進程可以使用的重複句柄。
  • 進程可以在 呼叫 OpenSemaphoreCreateSemaphoreEx 函式時指定號誌對象的名稱。
使用 CloseHandle 函式關閉句柄。 當進程終止時,系統會自動關閉句柄。 當最後一個句柄關閉時,旗號物件就會終結。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 synchapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CloseHandle

旗號物件

同步處理函式