この記事のセクション「さらに待機中...」で、著者が I/O とスレッドの同期について話したとき、彼が示した最初の例は次のとおりです。
hFile = CreateFile(....,FILE_IO_OVERLAPPED,...);
ReadFile(hFile,...)
< Do some computation.>
WaitForSingleObject(hFile,INFINITE);
「CreateFile」と「ReadFile」の両方が同期API であるという印象がありましたね。ここで「WaitForSingleObject」が必要なのはなぜですか? 「CreateFile」と「ReadFile」は、操作が終了してから戻るまでブロックされませんか?
次に、著者が「アラート可能な待機」について話すと、さらに混乱が生じます。WaitForSingleObjectEx() 後のスレッド状態とは何ですか? 次に、著者が与える理由:
while (WaitForSingleObject(hObject,TRUE)==WAIT_IO_COMPLETION);
の代わりに例として
while (WaitForSingleObjectEx(hObject,TRUE)==WAIT_IO_COMPLETION);
?
「ex」関数は次のように一緒にする必要があります。
hFile = CreateFile(....,FILE_IO_OVERLAPPED,...);
ReadFileEx(hFile,...)
< Do some computation.>
while (WaitForSingleObjectEx(hObject,TRUE)==WAIT_IO_COMPLETION);
もう少し説明できる人はいますか?
ありがとう、