IOCP 主要函数 整理

来源:互联网 发布:台湾学知出版社在哪 编辑:程序博客网 时间:2024/05/20 20:44

一直想单独写一个在win下的使用IOCP的网络层,鉴于整体的框架没有想好,首先把所用函数和自己的想法整理出来,以便将来使用

 

BOOL GetQueuedCompletionStatus(

  HANDLE CompletionPort,

  LPDWORD lpNumberOfBytes,

  PULONG_PTR lpCompletionKey,

  LPOVERLAPPED *lpOverlapped,

  DWORD dwMilliseconds);

 

CompletionPort:指定的IOCP,该值由CreateIoCompletionPort函数创建  (即创建的iocp句柄) 

lpnumberofbytes:一次完成后的I/O操作所传送数据的字节数。 (传递的是整形引用)

lpcompletionkey:当文件I/O操作完成后,用于存放与之关联(一般情况下,我在这里投递一个存放内存的结构体,并标示io操作)

lpoverlapped:为调用IOCP机制所引用的OVERLAPPED结构(这个结构体可在普通结构提的基础上扩展,实现伸缩性,我认为这个结构体存放的即为上下文)

dwmilliseconds:用于指定调用者等待的时间。(一般都不希望等待,所以通常为0)

 

BOOL PostQueuedCompletionStatus(

  HANDLE CompletlonPort,

  DW0RD dwNumberOfBytesTrlansferred,

  DWORD dwCompletlonKey,

  LPOVERLAPPED lpoverlapped,

  );

 

向消息队列传递的信息,可以根据信息的不同设置协议,比如传递PostQueuedCompletionStatus(hCompletionPort, 0, 0, NULL)一般用作关闭套接字

 

HANDLE CreateIoCompletionPort(
    HANDLE FileHandle,
    HANDLE ExistingCompletionPort,
    ULONG_PTR CompletionKey,
    DWORD NumberOfConcurrentThreads
);

 

在使用时需要注意的只有最后一个参数,他表示需要创建几个工作者线程。

未完待续

原创粉丝点击