WEB开发网
开发学院软件开发VC 一个简单的完成端口(服务端/客户端)类 阅读

一个简单的完成端口(服务端/客户端)类

 2009-02-25 19:59:50 来源:WEB开发网   
核心提示: 3.4 响应异步I/O请求响应具体的异步请求,调用函数WSASend和WSARecv,一个简单的完成端口(服务端/客户端)类(4),他们也需要一个参数:WSABUF,这个参数包含了一个指向缓冲的指针,在这一章节中,我们将描述四个不同的问题,一个重要的规则是:通常当服务器/客户端响应一个I/

3.4 响应异步I/O请求

响应具体的异步请求,调用函数WSASend和WSARecv。他们也需要一个参数:WSABUF,这个参数包含了一个指向缓冲的指针。一个重要的规则是:通常当服务器/客户端响应一个I/O操作,不是直接响应,而是提交给完成端口,由I/O工作者线程来执行。这么做的原因是:我们希望公平的分割CPU周期。通过发送状态给完成端口来发出I/O请求,如下:

BOOL bSuccess = PostQueuedCompletionStatus(m_hCompletionPort, 
  pOverlapBuff->GetUsed(), 
  (DWORD) pContext, 
  &pOverlapBuff->m_ol);

3.5 与线程同步

与I/O工作者线程同步是通过调用GetQueuedCompletionStatus函数来实现的(如下)。这个函数也提供了CompletionKey参数和OVERLAPPED参数,如下:

BOOL GetQueuedCompletionStatus(  HANDLE CompletionPort, // handle to completion port 
 LPDWORD lpNumberOfBytes, // bytes transferred 
 PULONG_PTR lpCompletionKey, // file completion key
  LPOVERLAPPED *lpOverlapped, // buffer
  DWORD dwMilliseconds // optional timeout value  
);

3.6 四个棘手的IOCP编码问题和解决方法

使用IOCP时会出现一些问题,其中有一些不是很直观的。在使用IOCP的多线程编程中,一个线程函数的控制流程不是笔直的,因为在线程和通讯直接没有关系。在这一章节中,我们将描述四个不同的问题,可能在使用IOCP开发客户端/服务器应用程序时会出现,分别是:

The WSAENOBUFS error problem.(WSAENOBUFS错误问题)

The package reordering problem.(包重构问题)

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:一个 简单 完成

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接