4

WinHttpSendRequest私のサービスには、誰かが私のサービスを停止しようとしたときに実行される可能性のあるスレッドがあります。

WinHttpCloseHandleのドキュメントには次のように書かれています。

HINTERNETアプリケーションは、を使用してリクエストハンドルを閉じることにより、進行中の同期または非同期リクエストを終了できます。WinHttpCloseHandle

しかし、後で同じドキュメントがこれと矛盾するようです。それは言う:

アプリケーションはWinHttpCloseHandle、同期要求を呼び出さないでください。これにより、競合状態が発生する可能性があります。

電話できないことに同意しているように見えるこのブログ投稿を見つけましWinHttpCloseHandleた。

サービスを正常に停止できるように、この操作をキャンセルするにはどうすればよいですか?WinHttpSendRequest時間がかかりすぎてサービスがすぐに停止しないため、自然にタイムアウトするのを本当に待つことはできません。Windowsはこれをエラーとして報告し、シャットダウン時にサービスを強制的に強制終了すると思います。

アイデアをいただければ幸いです。

4

1 に答える 1

1

バックグラウンドスレッドを呼び出しWinHttpCloseHandleてハンドルを強制的に閉じることは、おそらく最善の解決策ではありません。それでも機能し、元の呼び出し元は「不正なハンドル」エラーコードなどを受け取り、リクエストは強制的に終了します。

この力を悪用することはおそらく安全ではなく、代わりに非同期リクエストを実装することをお勧めします。ただし、古いサービスをシャットダウンした場合は正常に機能します。

于 2012-01-20T09:43:58.210 に答える