中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

Learn more

如何欺骗Windows认为你的应用程序仍然很忙,尽pipe它没有响应

我的应用程序是一个窗口应用程序,执行某些复杂的mathalgorithm。 因为我很久以前就开始使用该应用程序,所以大部分仍然是单线程的。 更确切地说,主线程执行所有复杂的计算逻辑。 在计算过程中,我提到在屏幕上显示一些进展是很重要的。 在大多数情况下,mathalgorithm只需要几秒钟,因此在用户启动操作之后,会显示一个沙漏(或Windows 7中的运行圆),几秒钟后显示结果。 在某些情况下,algorithm可能需要几分钟的时间。 在这段时间里,我显示沙漏,algorithm很忙,我在窗口中显示进度。 但是,如果用户在忙了一段时间之后点击应用程序,则窗口变得“更白”(就像在窗口上放置了不完全透明的塑料片一样),窗口不再被更新,并且Windows报告“该应用程序没有响应”。 我使用Qt,我使用Qt函数QWidget :: repaint强制重绘,而我的algorithm是繁忙的。 重绘工作一段时间,但如上所述,Windows似乎阻止了一段时间后。 什么是正确的方式告诉Windows,你的应用程序仍然忙,这样的窗口不断更新? 如果我input一个显式的消息循环,用户可能会在应用程序中触发其他不需要的操作。 调用PeekMessage足够了吗? 调用GetMessage就足够了? 还是应该调用DispatchMessage? 如何防止用户启动另一个操作(实际上是阻止所有的用户input) 每次更新我的窗口时,是否应该调用其中的一条消息,还是我可以限制自己每隔几秒钟调用一次(10秒?,30秒?) 请注意,将计算逻辑移至单独的线程当前不是一个选项。 我在Windows 7上使用Visual Studio 2010,并结合使用Qt 4.7。