【问题标题】:How can a synchronous WinHttp request be cancelled?如何取消同步 WinHttp 请求?
【发布时间】:2012-02-14 21:28:39
【问题描述】:

当有人试图停止我的服务时,我的服务有一个线程可能正在执行WinHttpSendRequest

WinHttpCloseHandle documentation 说:

应用程序可以通过使用WinHttpCloseHandle 关闭HINTERNET 请求句柄来终止正在进行的同步或异步请求

但是,后来在同一文档中似乎与此相矛盾。它说:

应用程序永远不应WinHttpCloseHandle 调用同步请求。这可能会产生竞争条件。

我发现this blog post 似乎同意我不能打电话给WinHttpCloseHandle

我想知道如何取消此操作以便可以正常停止我的服务?我真的不能等待WinHttpSendRequest 自然超时,因为它需要的时间太长而且我的服务没有足够快地停止。我认为 Windows 将此报告为错误,然后在关闭时强行终止该服务。

我们将不胜感激。

【问题讨论】:

    标签: winapi winhttp


    【解决方案1】:

    从后台线程调用WinHttpCloseHandle 来强制关闭句柄可能不是最好的解决方案。它仍然有效,并且原始调用者会收到类似“错误句柄”错误代码的内容,并且请求将被强制终止。

    滥用这种权力可能是不安全的,人们宁愿实现异步请求。但是,在关闭陈旧服务的情况下,它会正常工作。

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2014-07-17
      • 1970-01-01
      • 2020-05-24
      • 2021-01-25
      相关资源
      最近更新 更多