WEB开发网
开发学院软件开发VC 用完成端口开发大响应规模的Winsock应用程序 阅读

用完成端口开发大响应规模的Winsock应用程序

 2007-03-17 22:00:47 来源:WEB开发网   
核心提示: 完成端口的使用分为两步,首先创建完成端口,用完成端口开发大响应规模的Winsock应用程序(2),如以下代码所示:HANDLEhIocp;hIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,(ULONG_PTR)0,0);if

完成端口的使用分为两步。首先创建完成端口,如以下代码所示:

HANDLE  hIocp;
hIocp = CreateIoCompletionPort(
  INVALID_HANDLE_VALUE,
  NULL,
  (ULONG_PTR)0,
  0);
if (hIocp == NULL) {
  // Error
}
完成端口创建后,要把将使用该完成端口的套接字与之关联起来。方法是再次调用CreateIoCompletionPort ()函数,第一个参数FileHandle设为套接字的句柄,第二个参数ExistingCompletionPort 设为刚刚创建的那个完成端口的句柄。

以下代码创建了一个套接字,并把它和前面创建的完成端口关联起来:SOCKET  s;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
  // Error
if (CreateIoCompletionPort((HANDLE)s,
              hIocp,
              (ULONG_PTR)0,
              0) == NULL)
{
// Error
}
...
}

这时就完成了套接字与完成端口的关联操作。在这个套接字上进行的任何重叠操作都将通过完成端口发出完成通知。注意,CreateIoCompletionPort()函数中的第三个参数用来设置一个与该套接字相关的“完成键(completion key)”(译者注:完成键可以是任何数据类型)。每当完成通知到来时,应用程序可以读取相应的完成键,因此,完成键可用来给套接字传递一些背景信息。

在创建了完成端口、将一个或多个套接字与之相关联之后,我们就要创建若干个线程来处理完成通知。这些线程不断循环调用GetQueuedCompletionStatus ()函数并返回完成通知。

下面,我们先来看看应用程序如何跟踪这些重叠操作。当应用程序调用一个重叠操作函数时,要把指向一个overlapped结构的指针包括在其参数中。当操作完成后,我们可以通过GetQueuedCompletionStatus()函数中拿回这个指针。不过,单是根据这个指针所指向的overlapped结构,应用程序并不能分辨究竟完成的是哪个操作。要实现对操作的跟踪,你可以自己定义一个OVERLAPPED结构,在其中加入所需的跟踪信息。

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

Tags:完成 端口 开发

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