0

Windows ソケット経由で HTTP 接続を確立する C++/MFC で記述された Windows サービス アプリケーションがあります。WinHttp * APIを使用して、すべてのソケット関連操作を実行します。ソケットを介して接続中の場合に誰かがそのサービスを停止/アンインストールしようとする場合を除いて、すべてうまく機能します(特に、インターネットケーブルが抜かれている場合など、そのような接続を確立できなかった場合)ソケット API は、サービスが閉じる前に数秒間戻りません (明らかに、サービス内のメカニズムは、ソケット スレッドが「正常に」終了するのを待ちます)。

私の質問は、WinHttpOpen()、WinHttpConnect()、および WinHttpOpenRequest() への呼び出しから取得された (HINTERNET タイプの) 接続および要求ハンドルと同様に、開いているソケット ハンドルがある場合、他のものを強制的に作成する方法はありますか?現在ソケットで動作している可能性のある WinHttp* API はすぐに戻りますか?

PS。ソケットスレッドが閉じるのを待つ前に(サービスをアンインストール/停止する前に)、メインスレッドからそうすることを考えていました。

4

2 に答える 2

1

別のスレッドから WinHTTP ハンドルを閉じることができます。これにより、回避しようとしている遅延により、メイン スレッドでのブロッキング呼び出しが中断されます。同期 WinHttp 要求をキャンセルする方法を参照してください。

于 2012-04-18T10:50:15.857 に答える
0

[明らかに、サービス内のメカニズムは、ソケットスレッドが「正常に」終了するのを待ちます]-問題の原因がわかっている場合は、それを削除してみませんか?

なんで待ってるの?

于 2012-04-18T10:41:53.297 に答える