функция обратного вызова 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) |