WPUQueueApc 函式會將使用者模式非同步程序呼叫 (APC) 排入指定執行緒的佇列,以協助呼叫重迭的 I/O 完成常式。
語法
int WPUQueueApc(
[in] LPWSATHREADID lpThreadId,
[in] LPWSAUSERAPC lpfnUserApc,
[in] DWORD_PTR dwContext,
[out] LPINT lpErrno
);
參數
[in] lpThreadId
識別執行緒內容之 WSATHREADID 結構的指標。 此結構的指標是由 Ws2_32.dll 提供給服務提供者,做為重迭作業的輸入參數。 提供者應該在本機儲存 WSATHREADID 結構,並提供此本機存放區的指標。 一旦 WPUQueueApc 傳回,就不再需要 WSATHREADID 的本機複本。
[in] lpfnUserApc
要呼叫的 APC 函式指標。
[in] dwContext
32 位環境定義值,後續會作為輸入參數提供給 APC 函式。
[out] lpErrno
錯誤碼的指標。
返回值
如果未發生錯誤, WPUQueueApc 會傳回零,並將指定執行緒的完成常式排入佇列。 否則,它會傳回SOCKET_ERROR,而且 lpErrno 中會提供特定的錯誤碼。
| 錯誤碼 | Meaning |
|---|---|
| dwThreadId 參數未指定有效的執行緒。 |
備註
此函式會針對指定的執行緒將 APC 函式排入佇列。 在 Windows 下,這將使用使用者模式非同步過程呼叫 (APC) 來完成。 只有在指定的執行程在可警示等候中遭到封鎖時,APC 才會執行,而且會直接進行回呼。 此呼叫可在中斷內容內安全使用。
LPWSAUSERAPC 的定義如下:
typedef void ( CALLBACK FAR * LPWSAUSERAPC )( DWORD dwContext );
因為 APC 機制只支援單一內容值,所以 lpfnUserApc 本身不能是用戶端指定的完成常式,這涉及更多參數。 服務提供者必須改為提供其自己的 APC 函式的指標,該函式會使用提供的 dwContext 值來存取重迭作業所需的結果資訊,然後叫用用戶端指定的完成常式。
對於使用者模式元件實作重疊 I/O 的服務提供者,APC 機制的一般使用方式如下。
-
- 當 I/O 作業完成時,提供者會配置小型緩衝區,並使用用戶端所提供完成程式的指標和參數值來封裝它,以傳遞至程式。
- 它會將 APC 排入佇列,將緩衝區的指標指定為 dwContext 值,並將自己的中繼程式指定為目標程式 lpfnUserApc。
- 當目標執行緒最終進入可警示等候狀態時,會在適當的執行緒內容中呼叫服務提供者的中繼程式。
- 中繼程式只會解壓縮參數、解除配置緩衝區,並呼叫用戶端提供的完成程式。
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
| 支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
| 目標平臺 | 窗戶 |
| Header | ws2spi.h |