【发布时间】:2014-06-12 21:34:20
【问题描述】:
我有一个正在实现的 MFC DLL。主线程创建一个进度条(CProgressCtrl),然后启动一个 CWinThread 来执行一些套接字操作。这个想法是让主线程更新进度条,而另一个线程执行 sendto 套接字操作(数据请求)以请求数据。这是一个问题,由于遗留实现,接收功能是通过覆盖 CAsyncSocket 的 OnReceive 函数来完成的。调用 OnReceive 时,代码只是将数据复制到自己的缓冲区中,并允许稍后处理另一个函数。
目前,正在执行 sendto 操作(数据请求)的另一个线程正在检查缓冲区以查看序列号是否已增加。当 sendto 操作在主线程中时一切正常(这意味着 UI 将冻结),但是在我将 sendto 操作重新定位到另一个线程后,即使数据是从其他软件发送的,也不再调用 OnReceive(已验证)。
我的问题是,当对方明确发送数据时,为什么不调用 OnReceive?我知道这可能不是最佳设计,但由于遗留设计,我想保留当前设计。
【问题讨论】:
标签: c++ multithreading sockets mfc