GetSystemInfo(&SystemInfo);for(i = 0; i < SystemInfo.dwNumberOfProcessors * 2; i++)
{
HANDLE ThreadHandle;// 创建一个线程,把上面创建的完成端口传给线程
if ((ThreadHandle = CreateThread(NULL, 0, ServerWorkerThread, CompletionPort,
0, &ThreadID)) == NULL)
{
printf("CreateThread() failed with error %d\n", GetLastError());
return;
}
//如果我的服务器是一个CPU的话,是不是就创建了两个ServerWorkerThread?还是我创建了两次,而这两次创建的线程有着同样的入口地址呢?CloseHandle(ThreadHandle);
}

解决方案 »

  1.   

    我理解,你应该是说,如何得到发送完毕的通知吗?──────────────────────
    国内专业的ACE论坛开通:
    www.acejoy.com 
    www.acedevelop.com
    涉及ACE使用和开发,服务器端软件的设计,P2P技术,
    网络编程等内容。
    欢迎加入,大家一起交流、学习成长!
      

  2.   

    恩,第一个问题基本能确认答案了.谢谢3楼的.我的第二个问题是这样的,就是说有应用程序,操作系统,IO设备,还有IOCP(当然了,如果说大人说话小孩子别插嘴,这个地方就应该没有IOCP的事了,但是我觉得这里既然是讨论IOCP,就先把IOCP当成应用程序和系统之间通知的一个中间接口吧,也不知道这么说有哪些不合适的地方)我想问,从服务器端的Listen,客户端的connect,服务端的accept(acceptex),之后,操作系统和IOCP还有应用程序三者之间是怎么交互的?
    是应用程序收到客户端的连接请求,就将其关联到(associated)一个IOCP端口,
    IOCP通过CreateIOCompletionPort函数将绑定后的用来传数据的socket关联一个键值,
    关联之后IOCP就一边通知应用程序可以accept,一边投递一个消息到操作系统的队列中.
    之后应用程序的工作者线程在操作系统读到该消息的时候被启动,是这样的吗?当工作者线程将数据发完之后,需要通知IOCP,应用程序,操作系统三者,还是仅仅通知IOCP?IOCP只负责将连接请求关联到一个键值,然后放到操作系统的队列中,然后就去继续等待别的连接请求了,是不是?等到IO设备真正准备好了,被使用了发送完成了,再给出一个消息通知应用程序,是不是?欢迎指出我的理解错误之处.
      

  3.   

    完成端口的程序框架如下:
    http://www.acejoy.com/bbs/dispbbs.asp?boardid=14&id=51完成端口的核心是异步调用,你投递的操作会进入操作系统的队列中并立刻返回,然后你的程序可以去处理其它的任务,而你设置的工作者线程会调用GetQueuedCompletionStatus等待操作系统的处理结果,成功、失败、异步操作进程?
    更细致的处理过程,请看代码。
      

  4.   

    谢谢tomPeakz,我先看看那段代码.