【发布时间】:2017-12-14 08:45:02
【问题描述】:
我正在使用wxWizard,在我的第 3 页中,我需要从后端调用一个函数,当该函数需要很长时间才能发送响应时,我的应用程序挂起并且在标题中显示没有响应。一旦从后端函数收到响应,应用程序就会正常运行。为什么会这样?难道我做错了什么?我应该如何使该应用程序不挂起?由于某些网络问题或后端处理时间过长,后端函数的响应延迟。
【问题讨论】:
我正在使用wxWizard,在我的第 3 页中,我需要从后端调用一个函数,当该函数需要很长时间才能发送响应时,我的应用程序挂起并且在标题中显示没有响应。一旦从后端函数收到响应,应用程序就会正常运行。为什么会这样?难道我做错了什么?我应该如何使该应用程序不挂起?由于某些网络问题或后端处理时间过长,后端函数的响应延迟。
【问题讨论】:
见this answer。以下是摘录:
应用程序从 Windows 提供的队列中获取事件。
如果应用程序有一段时间(5 秒)没有轮询事件队列,例如在进行长时间计算时,则 Windows 假定应用程序已挂起并提醒用户。
为避免应用程序将昂贵的计算推送到工作线程或拆分处理,并确保定期轮询队列。
所以,您的代码的问题在于,在您的程序中只有一个线程,即 main 线程。它正在处理所有活动,例如UI 更新、事件处理、响应用户等(非常耗时)。但是当使用它来处理与后端服务器的连接时,它是耗时的。因此,您应该使用另一个线程来处理网络操作。这样 main 线程就可以正常工作了,不会显示它没有响应。
【讨论】: