GetQueuedCompletionStatus

【勇芳软件工作室】汉化HomePreviousNext

GetQueuedCompletionStatus功能尝试从指定的输入/输出完成端口出发I / O完成数据包。如果没有完成数据包排队,该函数将等待与完成端口关联的挂起输入/输出操作完成。该函数可以在完成数据包出队时返回,或者当功能超时时可以返回。如果由于I / O操作完成而返回该函数,则它将设置几个变量,以提供有关操作的信息。

BOOL GetQueuedCompletionStatus(

HANDLE 【CompletionPort】,//感兴趣的I / O完成端口
LPDWORD【lpNumberOfBytesTransferred】,//接收I / O期间传输的字节数
LPDWORD 【lpCompletionKey】,//接收文件的完成密钥
LPOVERLAPPED 【* lpOverlapped的】,//接收指向OVERLAPPED结构的指针
DWORD 【dwMilliseconds】//可选超时值
); 

参数

【CompletionPort】

处理感兴趣的输入/输出完成端口。I / O完成端口由CreateIoCompletionPort功能创建。

【lpNumberOfBytesTransferred】

指向功能设置为在完成的I / O操作期间传输的字节数的变量。

【lpCompletionKey】

指向功能设置为与I / O操作完成的文件句柄相关联的完成键值的变量。完成密钥是在调用CreateIoCompletionPort中指定的每个文件密钥。

【lpOverlapped的】

指向一个变量,该函数设置为在完成的输入/输出操作启动时指定的OVERLAPPED结构的地址。

以下功能可用于启动完成使用I / O完成端口的输入/输出操作。您必须使用I / O完成端口传递函数OVERLAPPED结构和与CreateIoCompletionPort的调用相关联的文件句柄)以调用I / O完成端口机制:

*ConnectNamedPipe

*DeviceIoControl

*LockFileEx

*ReadFile

*TransactNamedPipe

*WaitCommEvent

*WriteFile

即使您已将函数传递给与完成端口相关联的文件句柄和有效的OVERLAPPED结构,应用程序也可以阻止完成端口通知。这可以通过为OVERLAPPED结构的活动成员指定一个有效的事件句柄,并设置其低位位来完成。设置低阶位的有效事件句柄保持I / O完成从排队到完成端口。

【dwMilliseconds】

指定主叫方愿意等待完成数据包出现在I / O完成端口的毫秒数。如果在指定时间内没有出现完成数据包,则该函数超时,返回FALSE,并将* 【lpOverlapped的】设置为NULL。

如果【dwMilliseconds】是INFINITE,则该函数永远不会超时。如果【dwMilliseconds】为零并且没有I / O操作出队,则该函数将立即超时。

返回值

如果该函数从完成端口对完成数据包进行了一个成功的I / O操作,返回值不为零。该函数将信息存储在【lpNumberOfBytesTransferred】【lpCompletionKey】【lpOverlapped的】参数指向的变量中。

如果* 【lpOverlapped的】为NULL,并且该函数不会从完成端口出现完成数据包,返回值为零。该函数不会将信息存储在【lpNumberOfBytesTransferred】【lpCompletionKey】参数指向的变量中。要获取扩展错误信息,请调用GetLastError.如果功能没有出现完成数据包,因为等待超时,返回的错误是WAIT_TIMEOUT。

如果* 【lpOverlapped的】不为NULL,并且该函数从完成端口对出现故障I / O操作的完成数据包进行排队,则返回值为零。该函数将信息存储在【lpNumberOfBytesTransferred】【lpCompletionKey】【lpOverlapped的】指向的变量中。要获取扩展错误信息,请调用GetLastError.

备注

可以指示I / O系统向输入/输出完成端口发送I / O完成通知数据包,并将其排队。CreateIoCompletionPort功能为此提供了一种机制。

当使用具有相关输入/输出完成端口的文件句柄执行输入/输出操作时,I / O操作完成时,I / O系统会向完成端口发送完成通知数据包。I / O完成端口将完成数据包放入先入先出的队列。GetQueuedCompletionStatus功能检索这些排队的I / O完成数据包。

服务器应用程序可能有几个线程为相同的完成端口调用GetQueuedCompletionStatus.当输入操作完成时,操作系统将完成数据包排队到完成端口。如果线程正在等待调用此函数,则排队的请求完成其调用。

您可以调用PostQueuedCompletionStatus功能将I / O完成数据包发送到I / O完成端口。I / O完成数据包将满足对GetQueuedCompletionStatus功能的未完成调用。

也可以看看

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