MFC主线程只关注Dialog,需要处理从服务器接收到的数据

Posted

技术标签:

【中文标题】MFC主线程只关注Dialog,需要处理从服务器接收到的数据【英文标题】:MFC Main thread only focus on Dialog, need to deal with the data received from server 【发布时间】:2013-08-13 07:06:00 【问题描述】:

我的代码会从服务器接收 xml 数据,数据非常庞大。 从服务器接收完 xml 数据后,我的代码想继续解析 xml 数据,但是,我不知道为什么线程专注于对话框以接收来自系统的消息以进行绘制或做其他事情......没办法回到解析代码。 但是,如果我关闭对话框,它会自动返回解析代码吗?

有什么问题?请帮帮我.....

【问题讨论】:

我们可以看看你的代码吗..? 【参考方案1】:

在从 Internet 获取数据时,您的对话框的 onpaint 消息在消息循环中挂起。因为正如您所说的大数据,所以它会挂起您的应用程序。所有其他消息都放在消息队列中。一旦您的应用程序从挂起返回条件队列中出现的所有消息开始执行。最后,对话框的 WM_PAINT 消息也处于挂起状态,在挂起条件完成后和读取 xmle 文件之前执行。

【讨论】:

【参考方案2】:

如果您需要对话框在此期间响应,则需要在单独的线程中执行“接收和解析 xml 数据”。

使用CreateThread()启动一个线程,可以使用GetExitCodeThread()检查线程是否已经终止(并获取线程的退出码)。

或者,您可以使用 MFC CWinThread class 来做同样的事情。

【讨论】:

CreateThread 通常是错误的工具。如果应用程序调用 CRT(即几乎任何应用程序),它应该使用 _beginthreadex

以上是关于MFC主线程只关注Dialog,需要处理从服务器接收到的数据的主要内容,如果未能解决你的问题,请参考以下文章

c++/mfc 子线程结束后再来执行主线程下操作 该怎么处理

MFC多线程创建教程示例

MFC:如何从主线程使用 MsgWaitForMultipleObjects() 来等待多个线程完成使用 SendMessage()?

未调用 MFC 的 CWinThread::PostThreadMessage 处理程序

如何使用 AfxBeginThread创建MFC线程对象和Win32线程对象

MFC非模态添加进程控件方法一(线程方法)