我在 Qt 中有一个 UI 应用程序,有几个函数可以运行大规模 SQL 查询,返回数千个结果。
当单击运行此查询的按钮时,UI 窗口立即变为“无响应”,但是我可以从控制台输出中看到,所有内容实际上仍在后台运行。一旦函数结束,数据就会按预期显示,并且 UI 会再次响应并完全发挥作用。
我知道这是因为由于结果数量较多,该函数循环了数千次,但我希望我可以放入一个随着搜索而进行的加载栏,而不是仅仅锁定窗口看起来像是程序崩溃了。 AFAIK 我没有内存泄漏,所以有人有什么建议吗?
哦,我也认为这不是内存泄漏,因为当我单击该按钮时,任务管理器显示此进程仅使用了几 MB 内存,并且处理器也决不会最大化
在应用程序中,有一个线程负责处理 UI 事件、消息(无论您如何称呼它们)。假设您有一个按钮单击事件。只要您不从回调函数返回,就不会触发其他 UI 事件(重绘、更新等),并且 UI 变得无响应。
为了缓解这种情况,您应该考虑在单独的线程中执行耗时的任务,并在完成后相应地更新 UI。如果您需要在处理任务时阻止 UI,您可以禁用控件、显示弹出进度条等,但要保持 UI 线程相对空闲,以避免“不响应”问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)