CAsyncSocket和ThreadPool问题

时间:2010-04-18 09:09:51

标签: c++ sockets mfc multithreading threadpool

我有一个具有这种结构的服务器应用程序: 有一个对象,称他为Server,在无限循环中侦听并接受连接。 我有来自CAsyncSocket的后代类,它有覆盖事件OnReceive,称他为ProxySocket。 我还有一个带有早期创建线程的线程池。

当服务器对象收到连接时,他接受新对象ProxySocket上的新连接。 当数据到达ProxySocket时,他创建一个命令对象并将其提供给线程池。在这个命令对象中,我给出了ProxySocket的套接字句柄。当新的命令对象正在创建时 - 我在工作线程中创建一个新的Socket并为其附加句柄。
我的问题是下一个: 当命令结束时,套接字不会关闭,我只是分离处理它并按计划将CSocket句柄设置为INVALID_SOCKET值。但是我的第一个ProxySocket对象在此之后没有接收到新数据接收的消息。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为您不能在线程池方案中使用CAsyncSocket对象(或其后代)。 CAsyncSockets在WSASsyncSelect之上实现 - 它告诉winsock将通知发送到窗口句柄。 因为Windows具有线程亲和性,所以永远不能将CAsyncSocket处理“移动”到另一个线程。