На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

GetQueuedCompletionStatus



The GetQueuedCompletionStatus function attempts to dequeue an I/O completion packet from a specified input/output completion port. If there is no completion packet queued, the function waits for a pending input/output operation associated with the completion port to complete. The function returns when it can dequeue a completion packet, or optionally when the function times out. If the function returns because of an I/O operation completion, it sets several variables that provide information about the operation.

BOOL GetQueuedCompletionStatus(

HANDLE CompletionPort, // the I/O completion port of interest
LPDWORD lpNumberOfBytesTransferred, // to receive number of bytes transferred during I/O
LPDWORD lpCompletionKey, // to receive file's completion key
LPOVERLAPPED *lpOverlapped, // to receive pointer to OVERLAPPED structure
DWORD dwMilliseconds // optional timeout value
);


Parameters

CompletionPort

Handle to the input/output completion port of interest. I/O completion ports are created by the CreateIoCompletionPort function.

lpNumberOfBytesTransferred

Points to a variable that the function sets to the number of bytes transferred during an I/O operation that has completed.

lpCompletionKey

Points to a variable that the function sets to the completion key value associated with the file handle whose I/O operation has completed. A completion key is a per-file key that is specified in a call to CreateIoCompletionPort.

lpOverlapped

Points to a variable that the function sets to the address of the OVERLAPPED structure that was specified when the completed input/output operation was started.
The following functions can be used to start input/output operations that complete using I/O completion ports. You must pass the function an OVERLAPPED structure and a file handle associated (by a call to CreateIoCompletionPort) with an I/O completion port to invoke the I/O completion port mechanism:

· ConnectNamedPipe
· DeviceIoControl
· LockFileEx
· ReadFile
· TransactNamedPipe
· WaitCommEvent
· WriteFile



Even if you have passed the function a file handle associated with a completion port and a valid OVERLAPPED structure, an application can prevent completion port notification. This is done by specifying a valid event handle for the hEvent member of the OVERLAPPED structure, and setting its low-order bit. A valid event handle whose low-order bit is set keeps I/O completion from being queued to the completion port.

dwMilliseconds

Specifies the number of milliseconds that the caller is willing to wait for an completion packet to appear at the I/O completion port. If a completion packet doesn't appear within the specified time, the function times out, returns FALSE, and sets *lpOverlapped to NULL.
If dwMilliseconds is INFINITE, the function will never time out. If dwMilliseconds is zero and there is no I/O operation to dequeue, the function will time out immediately.



Return Values

If the function dequeues a completion packet for a successful I/O operation from the completion port, the return value is nonzero. The function stores information in the variables pointed to by the lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped parameters.
If *lpOverlapped is NULL and the function does not dequeue a completion packet from the completion port, the return value is zero. The function does not store information in the variables pointed to by the lpNumberOfBytesTransferred and lpCompletionKey parameters. To get extended error information, call GetLastError. If the function did not dequeue a completion packet because the wait timed out, the error returned is WAIT_TIMEOUT.

If *lpOverlapped is not NULL and the function dequeues a completion packet for a failed I/O operation from the completion port, the return value is zero. The function stores information in the variables pointed to by lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped. To get extended error information, call GetLastError.

Remarks

The I/O system can be instructed to send I/O completion notification packets to input/output completion ports, where they are queued up. The CreateIoCompletionPort function provides a mechanism for this.
When you perform an input/output operation with a file handle that has an associated input/output completion port, the I/O system sends a completion notification packet to the completion port when the I/O operation completes. The I/O completion port places the completion packet in a first-in-first-out queue. The GetQueuedCompletionStatus function retrieves these queued I/O completion packets.

A server application may have several threads calling GetQueuedCompletionStatus for the same completion port. As input operations complete, the operating system queues completion packets to the completion port. If threads are actively waiting in a call to this function, queued requests complete their call.
You can call the PostQueuedCompletionStatus function to post an I/O completion packet to an I/O completion port. The I/O completion packet will satisfy an outstanding call to the GetQueuedCompletionStatus function.

See Also

ConnectNamedPipe, CreateIoCompletionPort, DeviceIoControl, LockFileEx, OVERLAPPED, ReadFile, PostQueuedCompletionStatus, TransactNamedPipe, WaitCommEvent, WriteFile


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

GetQueuedCompletionStatus



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

BOOL GetQueuedCompletionStatus(

РУЧКА CompletionPort, // порт завершения В/В интереса LPDWORD lpNumberOfBytesTransferred, //, чтобы получать количество байтов переданных в течение В/В LPDWORD lpCompletionKey, //, чтобы получать файловую клавишу завершения LPOVERLAPPED *lpOverlapped, //, чтобы получать указатель на ПЕРЕКРЫВШЕЕ дополнительное время простоя структуры DWORD dwMilliseconds //
);


Параметры

CompletionPort

Прооперируйте ввод/выходное завершение порта интереса. ПОРТЫ завершения В/В созданы функцией CreateIoCompletionPort.

lpNumberOfBytesTransferred

Точки на переменную, что функция устанавливается в количество байтов переданных в течение операции В/В, которая завершилась.

lpCompletionKey

Точки на переменную, что функция устанавливается в ключевую величину завершения связанную файловой ручкой чья операция В/В завершилась. Клавиша завершения является per-файловой клавишей, которая определена на вызове на CreateIoCompletionPort.

lpOverlapped

Точки на переменную, что функция устанавливается по адресу ПЕРЕКРЫТОЙ структуры, которая была определена когда завершенный ввод/выходная операция был запущен.
Следующее функций может быть использовано, чтобы начинать ввод/выходные операции, который завершает используя порты завершения В/В. Вы должны передать функции ПЕРЕКРЫТУЮ структуру и файловая ручка связывала ( вызовом на CreateIoCompletionPort) с портом завершения В/В, чтобы вводить механизм порта завершения В/В:

ConnectNamedPipe DeviceIoControl LockFileEx ReadFile TransactNamedPipe WaitCommEvent WriteFile



Даже если бы Вы прошли функции файловую ручку связанную портом завершения и правильная ПЕРЕКРЫТАЯ структура, приложение может предохранить уведомление порта завершения. Это сделан посредством определения правильной ручки события для элемента hEvent ПЕРЕКРЫТОЙ структуры, и устанавливая младший бит. Правильная ручка события чей младший бит является установкой держит завершение В/В из поставленное в очередь в порт завершения.

dwMilliseconds

Определяет количество миллисекунд, что вызывающий оператор желает ждать пакет завершения, чтобы появляться в порту завершения В/В. Если пакет завершения не появляется в течение определенного времени, функциональное время, ЛОЖЬ возврата, и комплекты *lpOverlapped на НЕДЕЙСТВИТЕЛЬНЫЙ.
Если dwMilliseconds БЕСКОНЕЧНЫЙ, функция не будет никогда времени. Если dwMilliseconds - нуль и нет операции В/В, чтобы убираться из очереди, функция будет временем немедленно.



Обратные Величины

Если функция убирает из очереди пакет завершения для успешной операции В/В из порта завершения, обратная величина ненулевая. Функция загружает информацию в переменные указанные, чтобы lpNumberOfBytesTransferred, lpCompletionKey, и lpOverlapped параметры.
Если *lpOverlapped НЕДЕЙСТВИТЕЛЬНО и функция не убирает из очереди пакет завершения из порта завершения, обратная величина нулевая. Функция не загружает информацию в переменные указанные, чтобы lpNumberOfBytesTransferred и параметрами lpCompletionKey. Для того, чтобы расширять информацию ошибки, назовите GetLastError. Если функция не убирала бы из очереди пакет завершения поскольку ожидание синхронизированная, возвращанная ошибка - WAIT_TIMEOUT.

Если *lpOverlapped не НЕДЕЙСТВИТЕЛЬНО и функция убирает из очереди пакет завершения для неудачной операции В/В из порта завершения, обратная величина нулевая. Функция загружает информацию в переменные указанные, чтобы lpNumberOfBytesTransferred, lpCompletionKey, и lpOverlapped. Для того, чтобы расширять информацию ошибки, назовите GetLastError.

Замечания

Система В/В может быть указана, чтобы посылать пакеты уведомления завершения В/В на ввод/выходное завершение портов, где они поставлены в очередь по. Функция CreateIoCompletionPort обеспечивает механизм для этого.
Когда Вы выполняете ввод/выходная операция с файловой ручкой, которая имеет связанный ввод/выходное завершение порта, система В/В посылает пакет уведомления завершения в порт завершения когда операция В/В завершается. Порт завершения В/В устанавливает пакет завершения в сначала-в-сначала- очереди. Функция GetQueuedCompletionStatus извлекает эту поставившую в очередь пакеты завершения В/В.

Приложение сервера может иметь нескольких резьбы, вызывающих GetQueuedCompletionStatus к тому же порту завершения. Так как операции ввода полные, операционная система ставит в очередь пакеты завершения в порт завершения. Если резьба активно ожидается на вызове на это функция, поставившем в очередь запросы завершать их вызов.
Вы можете назвать функцию PostQueuedCompletionStatus, чтобы посылать пакет завершения В/В в порт завершения В/В. Пакет завершения В/В удовлетворит выдающийся вызов в функцию GetQueuedCompletionStatus.

Смотри Также

ConnectNamedPipe, CreateIoCompletionPort, DeviceIoControl, LockFileEx, ПЕРЕКРЫТОЕ, ReadFile, PostQueuedCompletionStatus, TransactNamedPipe, WaitCommEvent, WriteFile


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz