Win32 API 日本語リファレンス
ホーム › System.IO › LPOVERLAPPED_COMPLETION_ROUTINE

LPOVERLAPPED_COMPLETION_ROUTINE

コールバック

シグネチャ

void LPOVERLAPPED_COMPLETION_ROUTINE(
    DWORD dwErrorCode,
    DWORD dwNumberOfBytesTransfered,
    OVERLAPPED* lpOverlapped
);

パラメーター

フィールド型説明
dwErrorCodeDWORDI/O の完了状態です。このパラメーターには、 システム エラー コードのいずれかが設定されます。
dwNumberOfBytesTransferedDWORD転送されたバイト数です。エラーが発生した場合、このパラメーターは 0 になります。
lpOverlappedOVERLAPPED*

非同期 I/O 関数で指定された OVERLAPPED 構造体への ポインターです。

システムは、完了ルーチンが呼び出された後は OVERLAPPED 構造体を 使用しません。そのため、完了ルーチンでオーバーラップ構造体に使用されているメモリを解放できます。

公式ドキュメント

アプリケーション定義のコールバック関数で、 ReadFileEx 関数および WriteFileEx 関数と共に使用します。この関数は、非同期の 入出力 (I/O) 操作が完了または取り消され、かつ呼び出し元のスレッドが (SleepEx、 MsgWaitForMultipleObjectsEx、 WaitForSingleObjectEx、または WaitForMultipleObjectsEx 関数の fAlertable パラメーターに TRUE を指定することで) アラート可能状態になっているときに呼び出されます。

LPOVERLAPPED_COMPLETION_ROUTINE 型は、このコールバック関数へのポインターを定義します。FileIOCompletionRoutine は、 アプリケーション定義の関数名のプレースホルダーです。

解説(Remarks)

非同期操作の戻り値は、操作が正常に完了した場合、または警告付きで完了した場合は 0 (ERROR_SUCCESS) です。 I/O 操作が正常に完了したかどうかを判断するには、dwErrorCode が 0 であることを確認したうえで GetOverlappedResult を呼び出し、続いて GetLastError を呼び出します。たとえば、ReadFileEx の呼び出しで すべてのデータを受け取るにはバッファーが十分な大きさでなかった場合、 dwErrorCode は 0 に設定され、 GetOverlappedResult は失敗し、 GetLastError は ERROR_MORE_DATA を返します。

この関数から戻ると、保留中の別の I/O 完了ルーチンを呼び出せるようになります。待機中のすべての 完了ルーチンは、アラート可能なスレッドの待機が WAIT_IO_COMPLETION という戻りコードで完了する前に呼び出されます。システムは、待機中の完了ルーチンを任意の順序で呼び出す場合があります。 I/O 関数が完了した順序で呼び出されるとは限りません。

システムが完了ルーチンを呼び出すたびに、アプリケーションのスタックの一部が使用されます。完了ルーチンが さらに非同期 I/O やアラート可能な待機を行う場合、スタックが増大する可能性があります。

詳細については、 Asynchronous Procedure Calls を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)