【发布时间】:2017-09-06 09:39:19
【问题描述】:
给定一些这样的代码......
auto res = GetScreenResolution();
// Can windows change the screen resolution between these calls?
// How do you guard against it?
DoSomething(res);
可以在函数调用之间更改屏幕的分辨率吗?从用户调整显示设置说。我认为它可以,但我会要求确定。
如果在调用之间更改了分辨率,则函数 DoSomething 可能无法正常工作,或者根据代码导致重大问题。
有什么办法可以确保在一段代码执行期间不能更改系统(或特定设置)?
同样的概念可以应用于各种事情,比如检查网络是否启动或检查文件的状态。
发生某事的可能性很小,不值得打扰,但我很好奇。
一夜之间的一些想法......
在 DoSomething() 之后再次调用 GetScreenResolution() 以检查匹配项。这也将允许您撤消所做的更改并更正它们。仍然有可能出现问题,但要低得多。
如果出现异常,DoSomething()可能会抛出带有过期数据的软件异常。然后,您可以做任何必要的事情。
如果您必须在 GetScreenResolution 和 DoSomething 之间进行大量处理,比如说一分钟,那么检查系统的更改可能是值得的。如果您收到有关分辨率已更改的消息,如果您的架构允许,您也可以重置处理。
【问题讨论】:
-
然后它发生在 check 和执行之间。去做吧,为失败做好准备。
标签: windows system reliability