考虑到这样的代码......
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之间进行大量处理,比如说一分钟,那么可能值得检查系统的变化。如果您收到更改分辨率的消息,您还可以重置处理,如果您的体系结构允许的话。
答案 0 :(得分:0)
您只需为失败做好准备和/或确保您收到有关任何更改的通知。
即使你可以采取锁定以防止其他应用程序更改显示设置,也无法阻止我拉出显示器电缆和Windows对此作出反应并使我的笔记本电脑屏幕成为主显示器。
例如,如果你看一下ChangeDisplaySettings
,你会在MSDN上看到这个:
当动态更改显示模式时,WM_DISPLAYCHANGE消息将发送到所有正在运行的应用程序,并带有以下消息参数。
您唯一可以采取的措施就是使用job object限制您控制下的特定流程/流程调用某些功能(JOB_OBJECT_UILIMIT_DISPLAYSETTINGS
等。)。