防止Windows

时间:2017-09-06 09:39:19

标签: windows system reliability

考虑到这样的代码......

auto res = GetScreenResolution();

// Can windows change the screen resolution between these calls? 
// How do you guard against it?

DoSomething(res);

可以在功能调用之间更改屏幕的分辨率吗?从用户调整显示设置说。我认为它可以,但我会要求确定性。

如果在调用之间更改分辨率,则 DoSomething 功能可能无法正常工作,或者根据代码导致严重问题。

有没有办法确保在执行一段代码时无法更改系统(或特定设置)?

同样的概念可以应用于各种事物,例如检查网络是否已启动或检查文件的状态。

事情发生的可能性很小,不值得打扰,但我很好奇。

一夜之间的想法......

  1. 在DoSomething()之后再次调用GetScreenResolution()以检查匹配项。这也可以让您撤消已经做出的更改并进行更正。它仍然可能发生问题,但它仍然低得多。

  2. 除了例外,DoSomething()可能抛出一个带有过期数据的软件异常。然后你可以做任何必要的事情。

  3. 如果你需要在GetScreenResolution和DoSomething之间进行大量处理,比如说一分钟,那么可能值得检查系统的变化。如果您收到更改分辨率的消息,您还可以重置处理,如果您的体系结构允许的话。

1 个答案:

答案 0 :(得分:0)

您只需为失败做好准备和/或确保您收到有关任何更改的通知。

即使你可以采取锁定以防止其他应用程序更改显示设置,也无法阻止我拉出显示器电缆和Windows对此作出反应并使我的笔记本电脑屏幕成为主显示器。

例如,如果你看一下ChangeDisplaySettings,你会在MSDN上看到这个:

  

当动态更改显示模式时,WM_DISPLAYCHANGE消息将发送到所有正在运行的应用程序,并带有以下消息参数。

您唯一可以采取的措施就是使用job object限制您控制下的特定流程/流程调用某些功能(JOB_OBJECT_UILIMIT_DISPLAYSETTINGS等。)。