函數調用鑑於一些像這樣的代碼......防範系統的變化之間在Windows
auto res = GetScreenResolution();
// Can windows change the screen resolution between these calls?
// How do you guard against it?
DoSomething(res);
可以在屏幕的分辨率的函數調用之間是否會改變?從用戶調整顯示設置。我認爲它可以但我會要求確定。
如果分辨率在兩次調用之間發生變化,則函數DoSomething可能無法正常工作,或者根據代碼導致嚴重問題。
有沒有什麼辦法可以確保系統(或特定設置)在執行一段代碼期間無法更改?
相同的概念可以應用於各種事情,如檢查網絡是否啓動或檢查文件的狀態。
事情發生的概率很小,不值得打擾,但我很好奇。
一些隔夜的想法...
呼叫GetScreenResolution()後再次DoSomething的(),以檢查匹配。這也可以讓你撤銷你所做的更改並改正它們。問題仍然存在,但仍然低得多。
有例外,DoSomething()可能會拋出一個軟件異常與過時的數據。然後你可以做任何必要的事情。
如果您必須在GetScreenResolution和DoSomething之間進行大量處理,比如說一分鐘,那麼可能需要檢查系統的更改。如果您收到解決更改的消息,則您也可以重置處理,如果您的體系結構允許的話。
然後它發生在_check_和執行之間。只要做到這一點,併爲失敗做好準備。 – CodeCaster