【问题标题】:CAsyncSocket and ThreadPool problemCAsyncSocket 和 ThreadPool 问题
【发布时间】:2011-02-09 08:10:01
【问题描述】:

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

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

【问题讨论】:

    标签: c++ sockets mfc multithreading threadpool


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2013-09-29
      • 2010-09-27
      • 1970-01-01
      • 2010-10-17
      • 2014-02-26
      • 2023-03-27
      • 2011-04-20
      • 2014-06-17
      相关资源
      最近更新 更多