winHttpCloseHandle 函式 (winHTTP.h)
WinHttpCloseHandle 函式會關閉單一 HINTERNET 句柄 (請參閱 WinHTTP) 中的 HINTERNET 句柄。
語法
WINHTTPAPI BOOL WinHttpCloseHandle(
[in] HINTERNET hInternet
);
參數
[in] hInternet
有效的 HINTERNET 句柄 (請參閱 WinHTTP) 中要關閉的 HINTERNET 句柄 。
傳回值
如果成功關閉句柄,則為TRUE,否則為 FALSE。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 傳回的錯誤碼如下。
錯誤碼 | Description |
---|---|
|
WinHTTP 函式支援正在關閉或卸除。 |
|
發生內部錯誤。 |
|
記憶體不足,無法完成要求的作業。 (Windows 錯誤碼) |
備註
即使 WinHTTP 用於異步模式 (亦即,在 WinHttpOpen) 中設定WINHTTP_FLAG_ASYNC時,此函式仍會同步運作。 傳回值表示成功或失敗。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
如果已針對正在關閉的句柄註冊狀態回呼,且句柄是以非 NULL 內容值建立,則會建立 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING回 呼。 這是從句柄建立的最後一個回呼,表示正在終結句柄。
應用程式可以使用 WinHttpCloseHandle 來關閉 HINTERNET 要求句柄,以終止進行中的異步要求。 請記住下列重點:
- 應用程式在 WinHTTP 句柄上呼叫 WinHttpCloseHandle 之後,就無法從任何線程使用該句柄呼叫任何其他 WinHTTP API 函式。
- 即使在 呼叫 WinHttpCloseHandle 傳回之後,應用程式仍必須準備好接收已關閉句柄的回呼,因為 WinHTTP 可以異步終止句柄。 如果異步要求無法順利完成,回呼會收到WINHTTP_CALLBACK_STATUS_REQUEST_ERROR通知。
- 如果應用程式將內容數據結構或物件與句柄產生關聯,它應該會維護該系結,直到回呼函式收到 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 通知為止。 這是從記憶體中刪除句柄物件之前,WinHTTP 傳送的最後一個回呼通知。 若要接收WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING回呼通知,應用程式必須在 WinHttpSetStatusCallback 呼叫中啟用WINHTTP_CALLBACK_FLAG_HANDLES旗標。
-
呼叫 WinHttpCloseHandle 之前,應用程式可以呼叫 WinHttpSetStatusCallback ,以指出不應該再進行回呼:
WinHttpSetStatusCallback( hRequest, NULL, 0, 0 );
內容數據結構可能接著可以立即釋放,而不需等候 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 通知,但這不是這種情況: WinHTTP 不會同步處理 WinHttpSetStatusCallback 與源自背景工作線程的回呼。 因此,回呼可能已經從另一個線程進行中,而且即使有 NULL 輸出回呼函式指標並刪除句柄的內容數據結構,應用程式仍會收到回呼通知。 由於這種潛在的競爭條件,在收到 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 通知之後,在釋放內容結構時,請謹慎使用。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP、Windows 2000 Professional 與 SP3 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003、具有 SP3 的 Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winhttp.h |
程式庫 | Winhttp.lib |
Dll | Winhttp.dll |
可轉散發套件 | Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更新版本。 |