CreateIoCompletionPort

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

CreateIoCompletionPort功能可以将打开的文件的实例与新创建的或现有的输入/输出完成端口相关联;或者可以创建一个输入/输出完成端口,而不需要将其与文件相关联。

将打开的文件的实例与输入/输出完成端口关联使得应用程序接收到涉及该文件的异步输入/输出操作的完成的通知。

手柄CreateIoCompletionPort(

HANDLE 【FileHandle】,//与I / O完成端口关联的文件句柄
HANDLE【ExistingCompletionPort】,//现有I / O完成端口的可选句柄
DWORD 【CompletionKey】,// I / O完成数据包的每个文件完成密钥
DWORD 【NumberOfConcurrentThreads】//允许同时执行的线程数
); 

参数

【FileHandle】

处理到打开的重叠输入/输出完成的文件。当使用CreateFile函数获取这样的句柄时,必须指定FILE_FLAG_OVERLAPPED标志。

一旦打开文件的实例与I / O完成端口相关联,则不能在ReadFileExWriteFileEx操作中使用。

最好不要通过句柄继承或者调用DuplicateHandle 函数来共享这样的关联文件。使用这种重复句柄完成的输入/输出操作将生成完成通知。

如果【FileHandle】指定INVALID_HANDLE_VALUE,则CreateIoCompletionPort创建一个输入/输出完成端口,而不将其与文件相关联。在这种情况下,【ExistingCompletionPort】参数必须为NULL,并且【CompletionKey】参数将被忽略。

【ExistingCompletionPort】

处理到现有的I / O完成端口。此参数可以为NULL。

如果此参数不为NULL,则指定该函数与【FileHandle】指定的文件相关联的现有完成端口。

如果此参数为NULL,该函数将创建一个与指定文件相关联的新的输入/输出完成端口。

【CompletionKey】

指定将包含在指定文件的每个输入/输出完成数据包中的每个文件完成密钥。

【NumberOfConcurrentThreads】

指定允许并发执行的线程数。

如果其中一个线程进入等待状态,则允许另一个线程继续。当活动线程数超过指定值时,可能会有短暂的时间,但操作系统会快速将数字退回。

此参数的值为0表示操作系统允许与系统中的处理器一样多的线程。

返回值

如果函数成功,则返回值是与指定文件相关联的I / O完成端口的句柄。此返回值不为NULL。

如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.

备注

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

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

相同进程中的线程可以使用PostQueuedCompletionStatus功能将I / O完成通知数据包放在完成端口的队列中。除了从Win32 I / O系统接收到I / O完成通知数据包之外,还允许您使用端口接收来自进程的其他线程的通信。

也可以看看

GetQueuedCompletionStatus, PostQueuedCompletionStatus