在我的MFC应用程序中,我使用TCP / IP套接字进行通信并从服务器获取数据。在此过程中,我正在显示一个带有静态文本和进度控制的无模型对话框。在通信期间,我正在更新静态文本和进度控制在一个单独的用户线程(AfxBeginThread)。
如果我尝试与错误的ip通信,则套接字选择具有超时值5秒的功能,阻止显示带有静态文本和进度控制的对话框(即对话框挂起,控件将显示)。
一旦套接字从select函数中弹出,对话框就会正确显示。
如何解决这个问题?
答案 0 :(得分:0)
在MFC中,我强烈建议使用}\n{
,并在数据从服务器进入时作出反应。您可能根本不需要启动线程。
如果您要为部分工作启动一个单独的线程,那么您希望以不同的方式将任务分配给线程。您总是希望在主线程(默认情况下创建的线程)中保留UI更新。如果您打算使用(例如)阻塞套接字,并在其上调用select,则您希望将 工作移动到单独的线程,并将UI更新保留在线程中这是默认创建的。然后处理套接字的线程可以(例如)向UI线程发送消息,告诉它发生了什么,因此它可以适当地更新UI。但是,如前所述,您可能只想使用CAsyncSocket
,在这种情况下,您根本不需要第二个线程。