//在此定义一个全局的队列(先进先出性质)DWORD WINAPI acceptProcessThread(LPVOID p)
{
    while(true)
    {
         WaitForSingleObject(hEvent);
         //从队列中取出一个已接受的用户,处理它
         //如果队列长度为0,则设置hEvent为非激发态。
    }
}DWORD WINAPI acceptThread(LPVOID p)
{
    while(true)
    {
        client = WSAAccept(...);
        //将client推入处理队列,并将hEvent设置为激发状态
        //开始接受下一个链接
    }
}使用了两个线程。服务器是4CPU的,这一点不需要担心,因为到目前为止,加上其它的所有处理线程,刚才是4个,呵呵,每CPU分得一个:)这样做我主要是想避免比较麻烦的AcceptEx。而且,按书上说AcceptEx最大的一个好处就是可以在接受用户的同时收入其一次发来的数据。而我不需要这一个功能。在接受用户的时候不可能有发来的数据,仅仅只是接受而已。所以,不知道我用这种方法代替CPU的处理其效率会有多大的差距?更好?更坏?

解决方案 »

  1.   

    GOOD,  这样的设计不错啊。比起AcceptEx各有好处吧
    不过线程数可以增为1 cpu 2 线程。
      

  2.   

    真是画足添蛇!
    AcceptEx比你这个好1000倍。“而且,按书上说AcceptEx最大的一个好处就是可以在接受用户的同时收入其一次发来的数据。而我不需要这一个功能。在接受用户的时候不可能有发来的数据,仅仅只是接受而已。”
    不直接接收数据时dwReceiveDataLength填0就行了嘛。
    而且直接收数据对段连接还是非常有用的。