所以,我有一个CSocket在一个工作线程中监听,它会做一个阻塞接受,然后为每个新连接转动另一个线程(是的,我知道perfermance不是问题)。
一个人怎么会停止听? 你不能从另一个线程调用它,因为CSocket会抛出一个断言。
任何快速修复或者只是扔掉这个设计糟糕的包装纸?
答案 0 :(得分:0)
来自MSDN:
如果您想在另一个线程中处理此连接,只需 将MFC对象传递给线程将无法正常工作。至 正确设置要在a中处理的连接的所有内容 不同的线程,需要以下步骤:
- 从接受连接的线程中的CAsyncSocket对象中分离套接字句柄。
- 将套接字句柄传递给线程。
- 在该线程中,将此句柄附加到CAsyncSocket派生对象。
醇>
如果您要创建性能关键程序,我个人使用IOCP。
代码看起来类似于:
Accept(ClientSocketObject, ... );
SOCKET s = ClientSocketObject.Detach();
CreateThread( ... ,(LPVOID)s, ...);
在你的线程程序中,
ThreadProc( SOCKET s ){
CAsyncSocket clientSocket;
clientSocket.Attach( s );