2012-01-20 20 views
2

私のサービスには、誰かがサービスを停止しようとしたときに潜在的にWinHttpSendRequestを実行しているスレッドがあります。同期WinHttp要求をどのように取り消すことができますか?

WinHttpCloseHandle documentationは言う:

アプリケーション、WinHttpCloseHandle

を使用してHINTERNET要求ハンドルを閉じることにより、進行中の同期または非同期要求を終了することができますが、その後、同じマニュアルのように見えますこれに反する。それは言う:

アプリケーションは決してWinHttpCloseHandle同期要求を呼び出すべきではない。競合状態が発生する可能性があります。

this blog post私はWinHttpCloseHandleに電話することはできません。

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

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

答えて

0

WinHttpCloseHandleをバックグラウンドスレッドで呼び出してハンドルを強制的に閉じることは、おそらく最適な解決策ではありません。それでも動作し、元の呼び出し元は "bad handle"エラーコードのようなものを受け取り、要求は強制終了されます。

この機能を悪用することはおそらく安全ではなく、代わりに非同期要求を実装することになります。しかし、失効したサービスを停止する場合、正常に動作します。

関連する問題