同期の wininet 要求を使用InternetReadFileEx()
してIRF_NO_WAIT
フラグを指定して呼び出していますが、関数はまだデータの待機をブロックしています。何故ですか?
1294 次
3 に答える
1
考えられる回避策は、InternetQueryOption() を使用して INTERNET_DIAGNOSTIC_SOCKET_INFO 構造体を取得し、SOCKET ハンドルを {0, 0} のタイムアウトで ::select() に渡して、ブロックせずにデータが利用可能かどうかを判断することです。
于 2009-06-25T23:11:22.607 に答える
1
MSDN docsでは、の意味IRF_NO_WAIT
は次のように説明されています。
データを待ちません。使用可能なデータがある場合、関数は要求されたデータの量または使用可能なデータの量のいずれか小さい方を返します。
不思議なことに、利用可能なデータがない場合は未定義のままになります。どうやら、データがない場合は、ある程度になるまでブロックします。
于 2009-06-20T21:38:50.010 に答える
0
IRF_NO_WAIT が意味することは、要求されたデータ バッファーがすべて満たされるのを待たないことです。ただし、一部のデータが到着するまで待機します。データが到着しない場合、ブロックします。
于 2009-06-20T21:36:33.307 に答える