描述
WinHttpCloseHandle功能关闭一个HINTERNET句柄。
C / C ++语法
BOOL WinHttpCloseHandle( HINTERNET hInternet ); |
PowerBASIC 语法
FUNCTION WinHttpCloseHandle ( _ BYVAL hInternet AS DWORD _ ) AS LONG |
参数
hInternet
[in]有效HINTERNET句柄被关闭。
返回值
如果句柄成功关闭,则返回TRUE,否则返回FALSE。要获取扩展错误信息,请调用GetLastError.返回的错误代码有:
错误代码 |
描述 |
ERROR_WINHTTP_SHUTDOWN |
正在关闭或卸载WinHTTP功能支持。 |
ERROR_WINHTTP_INTERNAL_ERROR |
发生内部错误。 |
ERROR_NOT_ENOUGH_MEMORY |
没有足够的内存来完成请求的操作。(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_STATUS_CALLBACK_HANDLE_CLOSING通知。这是WinHTTP在从内存中删除句柄对象之前发送的最后一个回调通知。为了接收WINHTTP_STATUS_CALLBACK_HANDLE_CLOSING回调通知,应用程序必须在WinHttpSetStatusCallback调用中启用WINHTTP_CALLBACK_FLAG_HANDLES标志。 |
· | 在致电WinHttpCloseHandle之前,应用程序可以调用WinHttpSetStatusCallback表示不再有回调: |
WinHttpSetStatusCallback(hRequest, %NULL, 0, 0)
可能看起来上下文数据结构可以立即被释放,而不必等待WINHTTP_STATUS_CALLBACK_HANDLE_CLOSING通知,但是不是这样:WinHTTP不会同步WinHttpSetStatusCallback源于工作线程的回调。因此,回调可能已经从另一个线程进行,并且应用程序即使在空回出回调函数指针并删除了句柄的上下文数据结构之后也可以接收回调通知。由于这种潜在的竞争条件,在释放上下文结构之前要保守,直到收到WINHTTP_STATUS_CALLBACK_HANDLE_CLOSING通知为止。
对于同步请求,请考虑以下因素:
· | 如果为关闭的句柄注册了回调函数,则在阻塞API调用返回后,应用程序不会再收到任何进一步的回调。 |
· | 调用WinHttpCloseHandle后,应用程序无法使用正在关闭的句柄调用任何其他WinHTTP API函数。 |