socket编程时用异步模式,在accept时,用一个循环,条件是 WSAGetLastError()==WSAEWOULDBLOCK,结果CPU占用率100%,难道异步模式不是这么

时间:2022-08-27 15:28:21
我看过MFC 里CSocket的源代码,她是这么编的,但运行时CPU就没有占用率。哪位高人能指点一下?

11 个解决方案

#1


是不是这么编的。
看<windows网络编程技术>第8章: I/O模型

#2


不是这么用的。
看<windows网络编程技术>第8章 I/O模型

#3


CSocket继承自CAsyncSocket,可能有些机制在CAsyncSocket中实现的吧

#4


可以将SOCKET设成非阻塞方式,就可以实现异步模式。
用IOCtrl方法设置,可参阅MSDN

#5


为什么会有循环用accept的用法?
要么bind之后用select确定响应socket的FD_ACCEPT事件,
然后再listen,要么就自己写多线程,accept一个
就开一个线程,一个继续等,一个处理这个进来的东西

GetLastError好象不是这样来弄的吧

#6


用select或WSAAsyncSelect或WSAEventSelect

#7


DWORD dwFlag = 1;  // 非0则为非阻塞方式
m_Socket->IOCtl( FIONBIO, &dwFlag );

#8


正在看<windows网络编程技术>...

#9


<windows网络编程技术>哪里有下载?

#10


http://www.pautsoft.com/

#11


好书,谢了

#1


是不是这么编的。
看<windows网络编程技术>第8章: I/O模型

#2


不是这么用的。
看<windows网络编程技术>第8章 I/O模型

#3


CSocket继承自CAsyncSocket,可能有些机制在CAsyncSocket中实现的吧

#4


可以将SOCKET设成非阻塞方式,就可以实现异步模式。
用IOCtrl方法设置,可参阅MSDN

#5


为什么会有循环用accept的用法?
要么bind之后用select确定响应socket的FD_ACCEPT事件,
然后再listen,要么就自己写多线程,accept一个
就开一个线程,一个继续等,一个处理这个进来的东西

GetLastError好象不是这样来弄的吧

#6


用select或WSAAsyncSelect或WSAEventSelect

#7


DWORD dwFlag = 1;  // 非0则为非阻塞方式
m_Socket->IOCtl( FIONBIO, &dwFlag );

#8


正在看<windows网络编程技术>...

#9


<windows网络编程技术>哪里有下载?

#10


http://www.pautsoft.com/

#11


好书,谢了