如何避免程序上的Windows“不回答”消息

时间:2013-02-27 09:35:55

标签: c++ windows qt

使用Qt创建程序时,我们可以进行长时间的递归过程,

如果是这样,过了一会儿,windows会在窗口标题旁边显示“不回答”消息。

此消息可能会导致用户认为程序不起作用,这是不正确的。

如何在Qt中避免此消息?

3 个答案:

答案 0 :(得分:7)

为了保持对系统和用户输入的响应,将长时间运行的任务放入其自己的线程中。您可能还想向用户提供反馈,例如进度条,因此他看到该程序仍在执行他要求的工作。

另请参阅Threading Basics以获取有关在Qt和Threading and Concurrent Programming Examples中使用线程的介绍。

答案 1 :(得分:3)

如果你的进程由于循环(或递归函数)需要很长时间,你可以在循环中调用QCoreApplication :: processEvents()来请求你的应用程序处理事件。

如果只有一条指令需要很长时间(例如复制大文件),则可以使用QThread或QtConcurrent。

答案 2 :(得分:2)

虽然奥拉夫的答案很好,但更简单的方法是在代码中加上QCoreApplication::processEvents()

来自文档:

  

根据以下内容处理调用线程的所有挂起事件   指定的标志,直到没有其他事件要处理。您可以   当程序忙于执行a时,偶尔会调用此函数   长时间操作(例如复制文件)。