2010-04-18 59 views
0

我有一个这样的结构的服务器应用程序: 有一个对象,叫他服务器,在无限循环监听并接受连接。 我有来自CAsyncSocket的后代类,它已覆盖事件OnReceive,称他为ProxySocket。 另外我有一个线程池与早期创建的线程。CAsyncSocket和ThreadPool问题

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

回答

1

我不认为你可以在线程池secenario中使用CAsyncSocket对象(或它们的后代)。 CAsyncSockets在WSASsyncSelect之上实现 - 它告诉winsock向窗口句柄发送notifcations。 因为windows具有线程亲和性,所以不能将CAsyncSocket处理“移动”到不同的线程。