//在此定义一个全局的队列(先进先出性质)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的处理其效率会有多大的差距?更好?更坏?
{
while(true)
{
WaitForSingleObject(hEvent);
//从队列中取出一个已接受的用户,处理它
//如果队列长度为0,则设置hEvent为非激发态。
}
}DWORD WINAPI acceptThread(LPVOID p)
{
while(true)
{
client = WSAAccept(...);
//将client推入处理队列,并将hEvent设置为激发状态
//开始接受下一个链接
}
}使用了两个线程。服务器是4CPU的,这一点不需要担心,因为到目前为止,加上其它的所有处理线程,刚才是4个,呵呵,每CPU分得一个:)这样做我主要是想避免比较麻烦的AcceptEx。而且,按书上说AcceptEx最大的一个好处就是可以在接受用户的同时收入其一次发来的数据。而我不需要这一个功能。在接受用户的时候不可能有发来的数据,仅仅只是接受而已。所以,不知道我用这种方法代替CPU的处理其效率会有多大的差距?更好?更坏?
解决方案 »
- 一个老程序员的建议---看完了xx ,你决定继续做编程
- 鼠标停留在一条线1秒后弹出提示信息
- 用了skin++2.0,static控件自定义字体颜色问题??
- FormView/View/Dialog的问题
- CDATABASE用INSERT INTO插入时间CTIME
- 大学不好好学习 遇到一个鸟问题
- 请教消息传递的问题:以及如何半路杀死,例如F1,内详
- SetTimer该怎么使用啊,我在CDialog派生的类中使用没有问题,但是在CWnd派生的类中有问题
- 对于Socket中连接的疑问...
- VC怎么用位图资源作为主窗口背景
- 请教GDI+实现图形的缩放,显示程序4(100分)!assert1,我说话算数!
- MSDN出现异常,各位老大帮帮忙啊!
不过线程数可以增为1 cpu 2 线程。
AcceptEx比你这个好1000倍。“而且,按书上说AcceptEx最大的一个好处就是可以在接受用户的同时收入其一次发来的数据。而我不需要这一个功能。在接受用户的时候不可能有发来的数据,仅仅只是接受而已。”
不直接接收数据时dwReceiveDataLength填0就行了嘛。
而且直接收数据对段连接还是非常有用的。