GetOverlappedResult |
Declare Function Api_GetOverlappedResult& Lib "kernel32" Alias "GetOverlappedResult" (ByVal hFile&, lpOverlapped As OVERLAPPED, lpNumberOfBytesTransferred&, ByVal bWait&) |
Declare Function GetOverlappedResult Lib "kernel32" Alias "GetOverlappedResult" (ByVal hFile As Long, lpOverlapped As OVERLAPPED, lpNumberOfBytesTransferred As Long, ByVal bWait As Long) As Long |
|
指定されたファイル、名前付きパイプ、通信デバイスに関するオーバーラップ(非同期)操作の結果を返す。 |
|
パラメータ イト数が格納される。 関数を使って操作を行った場合は、パイプから読み取ったバイト数が格納される。 関数を使って操作を行った場合 は、デバイスドライバが返した出力データのバイト数が格納される。 関数、または 関数を使って操作を行った場合に格納される値は、未
定義である。
FALSE を指定すると、操作が未処理である場合、この関数は 0(FALSE)を返し、 関数は ERROR_IO_INCOMPLETE を返す。
操作を適用した結果、およびこの関数が制御を返した時点でその操作が未処理だった結果を表している。操作が未処理だった場合、その 操作を開始した関数は 0(FALSE)を返し、GetLastError 関数は ERROR_IO_PENDING を返す。I/O 操作が未処理の場合、その操作 を開始した関数は構造体のメンバをリセットして、非シグナル状態に設定する。その後、未処理だった操作が完了すると、システムはこの
イベントオブジェクトをシグナル状態に設定する。 オーバーラップ操作を開始した後、GetOverlappedResult 関数を呼び出すまでの間は、待機関数で、そのイベントオブジェクトを指定できな い。待機関数が制御を返すと、自動リセットイベントオブジェクトは非シグナル状態に設定されるからである。その後、bWait パラメータで
TRUE を指定して GetOverlappedResult 関数を呼び出すと、この関数は永続的にブロックされてしまう。
より、未処理の操作が完了したかどうかを判断する。 するために、この関数の hFile パラメータで指定したハンドルの状態を調べる(操作が完了すると、hFile ハンドルがシグナル状態になるから である)。この目的で、ファイル、名前付きパイプ、通信デバイスいずれかのハンドルを指定することは望ましくない。代わりにイベントオブジェ クトを使う方が安全である。1 つのファイル、名前付きパイプ、通信デバイスのいずれかに対して複数のオーバーラップ操作を同時に実行す ると、混乱が起こる可能性がある。このような状況では、どの操作がオブジェクトをシグナル状態にしたのか把握する方法はない。 |