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


Функция BindIoCompletionCallback (winbase.h)

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

Синтаксис

BOOL BindIoCompletionCallback(
  [in] HANDLE                          FileHandle,
  [in] LPOVERLAPPED_COMPLETION_ROUTINE Function,
  [in] ULONG                           Flags
);

Параметры

[in] FileHandle

Дескриптор файла, открытого для перекрытия завершения ввода-вывода. Этот дескриптор возвращается функцией CreateFile с флагом FILE_FLAG_OVERLAPPED .

[in] Function

Указатель на функцию обратного вызова, выполняемую в рабочем потоке, отличном от ввода-вывода, после завершения операции ввода-вывода. Эта функция обратного вызова не должна вызывать функцию TerminateThread .

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

[in] Flags

Этот параметр должен быть равен нулю.

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

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Чтобы получить расширенные сведения об ошибке, вызовите функцию GetLastError .

Комментарии

Функция обратного вызова может не выполняться, если процесс выдает асинхронный запрос к файлу, указанному параметром FileHandle , но запрос возвращается немедленно с кодом ошибки, отличным от ERROR_IO_PENDING.

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

Пул потоков поддерживает порт завершения ввода-вывода. При вызове BindIoCompletionCallback указанный файл связывается с портом завершения ввода-вывода пула потоков. Асинхронные запросы к объекту файла будут завершены путем отправки на порт завершения, где они будут приняты рабочими потоками пула потоков. Для обратных вызовов, которые должны выдавать запрос ввода-вывода, который завершается как асинхронный вызов процедуры, пул потоков предоставляет пул рабочих операций ввода-вывода. Рабочие потоки ввода-вывода не ждут порта завершения; они спят в состоянии ожидания с оповещениями, чтобы пакеты запросов ввода-вывода, завершив их, могли их разбудить. Оба типа рабочих потоков проверяют, есть ли в них ожидающие операции ввода-вывода, и если они есть, они не завершаются. Дополнительные сведения см. в разделе Асинхронные вызовы процедур.

Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0500 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

FileIOCompletionRoutine

Функции процессов и потоков

Группировка потоков в пул