ReadFileを完了させる方法

[戻る]
ho 2012/02/26(日) 03:47:45
windows xp,vc++2008(MFC)を使用しています。

非同期によるReadFile関数を使用していますが、
ReadFileの読み取り動作完了条件は、
・指定したサイズのデータを読み取った場合、
・オーバーラップ構造体のイベントがセットされたとき
の2つのみでしょうか?

実行中のReadFile関数を他のスレッドで中断したいのですが、
イベントをマニュアルでセットする方法しか思いつきません。
イベントをセットしても読み取り動作が完全に完了しているわけでなないので
CancelIO関数を使用しています。

中断させるための他の方法がありましたらおしえてください。

ITO 2012/02/26(日) 14:43:45
> 中断させるための他の方法がありましたらおしえてください。
CancelIO関数を利用するしかないと思います。
ReadFile関数のオーバーラップ構造体はセットしてありますよね。

http://msdn.microsoft.com/ja-jp/library/cc429679.aspx
ここにあるような非同期処理のプログラムを組んでありますか?
僕はそのまま利用しています。
非同期処理の例はネットで探すといろいろ出てきます。

gOverLapped.hEventを時間設定のWaitForSingleObjectで待って
TIMEOUTの戻りでCancelIO処理です。
オーバーラップ構造体をメインスレッドで読めるようにしておくと処理が楽です。

古いスレッドには追加発言できません。