我正在实现一个MFC DLL。主线程创建一个进度条(CProgressCtrl),然后启动CWinThread来执行一些套接字操作。这个想法是让主线程更新进度条,而另一个线程执行sendto套接字操作(数据请求)来请求数据。这是问题,但由于遗留实现,接收功能是通过覆盖CAsyncSocket的OnReceive功能完成的。当调用OnReceive时,代码只是将数据复制到自己的缓冲区中,并允许其他函数稍后处理。
目前,正在执行sendto操作的另一个线程(数据请求)是活动检查缓冲区以查看序列号是否已递增。当sendto操作在主线程内时(这意味着UI将冻结),这一切都正常工作,但在我将sendto操作重新定位到另一个线程后,即使从其他软件发送数据,也不再调用OnReceive(验证)。
我的问题是,当对方明确发送数据时,为什么OnReceive没有被调用?我知道这可能不是最佳设计,但由于传统设计,我想保留当前的设计。
答案 0 :(得分:0)
CASyncSocket绑定到创建它的线程。只有该线程才能收到OnReceive通知。