Поделиться через


функция обратного вызова LPOVERLAPPED_COMPLETION_ROUTINE (minwinbase.h)

Определяемая приложением функция обратного вызова, используемая с функциями ReadFileEx и WriteFileEx . Он вызывается, когда асинхронная операция ввода-вывода (I/O) завершена или отменена, а вызывающий поток находится в состоянии предупреждения (с помощью функции SleepEx, MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx или WaitForMultipleObjectsEx с параметром fAlertable, равнымTRUE).

Тип LPOVERLAPPED_COMPLETION_ROUTINE определяет указатель на эту функцию обратного вызова. FileIOCompletionRoutine — это заполнитель для имени определяемой приложением функции.

Синтаксис

LPOVERLAPPED_COMPLETION_ROUTINE LpoverlappedCompletionRoutine;

void LpoverlappedCompletionRoutine(
  [in]      DWORD dwErrorCode,
  [in]      DWORD dwNumberOfBytesTransfered,
  [in, out] LPOVERLAPPED lpOverlapped
)
{...}

Параметры

[in] dwErrorCode

Состояние завершения ввода-вывода. Этот параметр может быть одним из кодов системных ошибок.

[in] dwNumberOfBytesTransfered

Количество переданных байтов. При возникновении ошибки этот параметр равен нулю.

[in, out] lpOverlapped

Указатель на структуру OVERLAPPED , заданную асинхронной функцией ввода-вывода.

Система не использует структуру OVERLAPPED после вызова подпрограммы завершения, поэтому подпрограмма завершения может освободить память, используемую перекрывающейся структурой.

Возвращаемое значение

None

Remarks

Возвращаемое значение асинхронной операции равно 0 (ERROR_SUCCESS), если операция завершилась успешно или если операция завершилась с предупреждением. Чтобы определить, была ли операция ввода-вывода успешно завершена, проверка, что dwErrorCode равно 0, вызовите Метод GetOverlappedResult, а затем вызовите Метод GetLastError. Например, если буфер был недостаточно велик для получения всех данных из вызова ReadFileEx, dwErrorCode имеет значение 0, GetOverlappedResult завершается сбоем, а GetLastError возвращает ERROR_MORE_DATA.

Возвращаясь из этой функции, можно вызвать другую процедуру завершения ввода-вывода, ожидающую выполнения. Все подпрограммы завершения ожидания вызываются до завершения ожидания потока с оповещением с кодом возврата WAIT_IO_COMPLETION. Система может вызывать процедуры завершения ожидания в любом порядке. Они могут вызываться или не вызываться в порядке выполнения функций ввода-вывода.

Каждый раз, когда система вызывает подпрограмму завершения, она использует часть стека приложения. Если подпрограмма завершения выполняет дополнительные асинхронные операции ввода-вывода и ожидает оповещений, стек может увеличиваться.

Дополнительные сведения см. в разделе Асинхронные вызовы процедур.

Примеры

Пример кода см. в разделе Named Pipe Server Using Completion Routines.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header minwinbase.h (включая Windows.h)

См. также раздел

BindIoCompletionCallback

Функции управления файлами

ПЕРЕКРЫВАЮЩИХСЯ

ReadFileEx

SleepEx

Синхронный и асинхронный ввод-вывод

WaitForMultipleObjectsEx

WaitForSingleObjectEx

WriteFileEx