我们有一个应用程序在主线程中做了大量的工作.为防止Windows认为它"无响应"并启动重影功能(如此链接中的"挂起 - 操作系统透视"部分所述),我们可以使用DisableProcessWindowsGhosting关闭重影功能.
但是我们不希望在剩下的会话中将其关闭,我们希望在繁重的工作完成后重新开启.不幸的是,Windows没有提供任何(记录的)API.
是否有任何(可能是hacky)方式将其重新打开?
有趣的是,当应用程序在VC调试器中运行时,重影功能会被关闭,但是一旦它被分离,它就会重新启动.调试器必须有一些东西,任何想法?
小智 2
无视这样一个事实,在 UI 线程上做繁重的工作本身就是错误的(繁重的工作应该在一个单独的线程上完成,该线程可以选择将其进度传达给 UI),下面的建议只是为了回答这个问题,支持评论中提到的遗留代码场景。
DisableProcessWindowsGhosting是一条单向道路,并且在进程的生命周期内禁用重影功能,因此唯一的重新启用条件是重新启动整个进程。
否则,所有正在调试的应用程序(不仅在 VC 调试器中,而且在任何调试器中)也不会出现重影。如果您想解决这种情况,您可以创建一个配套应用程序,它将在繁重的工作期间作为调试器 ( ) 连接到您的应用程序,并在完成后DebugActiveProcess自行分离 ( DebugSetProcessKillOnExit(FALSE)+ )。DebugActiveProcessStop这会降低性能,并可能导致海拔、分叉和 SEH 等问题。
最小化的窗口应该也不会出现重影,但我自己还没有测试过这一点。
| 归档时间: |
|
| 查看次数: |
2747 次 |
| 最近记录: |