如何取消同步 WinHttp 请求?
Posted
技术标签:
【中文标题】如何取消同步 WinHttp 请求?【英文标题】:How can a synchronous WinHttp request be cancelled? 【发布时间】:2012-02-14 21:28:39 【问题描述】:当有人试图停止我的服务时,我的服务有一个线程可能正在执行WinHttpSendRequest
。
WinHttpCloseHandle documentation 说:
应用程序可以通过使用
WinHttpCloseHandle
关闭HINTERNET
请求句柄来终止正在进行的同步或异步请求
但是,后来在同一文档中似乎与此相矛盾。它说:
应用程序永远不应
WinHttpCloseHandle
调用同步请求。这可能会产生竞争条件。
我发现this blog post 似乎同意我不能打电话给WinHttpCloseHandle
。
我想知道如何取消此操作以便可以正常停止我的服务?我真的不能等待WinHttpSendRequest
自然超时,因为它需要的时间太长而且我的服务没有足够快地停止。我认为 Windows 将此报告为错误,然后在关闭时强行终止该服务。
我们将不胜感激。
【问题讨论】:
【参考方案1】:从后台线程调用WinHttpCloseHandle
来强制关闭句柄可能不是最好的解决方案。它仍然有效,并且原始调用者会收到类似“错误句柄”错误代码的内容,并且请求将被强制终止。
滥用这种权力可能是不安全的,人们宁愿实现异步请求。但是,在关闭陈旧服务的情况下,它会正常工作。
【讨论】:
以上是关于如何取消同步 WinHttp 请求?的主要内容,如果未能解决你的问题,请参考以下文章
wininet 或 winhttp,这是 POST 请求的首选