題:
可以使用ALT + F4關閉遊戲損壞的保存數據嗎?
Haider
2016-01-14 23:23:00 UTC
view on stackexchange narkive permalink

有了PS3之後,我對PC遊戲還是很陌生。我沒有切換到PS4,而是去了PC遊戲。到目前為止,一切都很棒。

但是有件事讓我擔心;在Windows中使用 alt kbd> + F4 kbd>退出遊戲時,是否可能導致保存的遊戲文件損壞,尤其是在自動保存期間?


Warning.這些答案很籠統,可能不適用於您的特定遊戲,在某些罕見情況下,按Alt-F4可能會損壞您的保存文件。(例如:遊戲在Dosbox,模擬器或終端中運行,或者在掛起的窗口中按Alt-F4,然後確認您要終止該進程。)

使用ALT-F4退出遊戲需要您自擔風險。

我想這只是在遊戲保存文件時,如果您按Alt + F4鍵,則只會影響保存數據。我無法想像為什麼否則會影響保存數據,否則就沒有意義了。
六 答案:
Mason Wheeler
2016-01-15 02:02:53 UTC
view on stackexchange narkive permalink

作為一名程序員,到目前為止發布的兩個答案都是錯誤的。儘管有可能出現這樣一種假設情況,即按 Alt kbd> + F4 kbd>會破壞進行中的保存,而實際上這樣做會要求開發人員會故意不顧一切地破壞儲蓄系統。

從編碼的角度來看,用戶按下 Alt kbd> + F4 kbd>不會“關閉活動窗口”,也不會“中斷程序”。這樣做是因為Windows將 WM_CLOSE 消息放置到程序的事件隊列中。就是這樣。

顧名思義,事件隊列是程序要處理的事件隊列。這主要包括用戶的輸入。 事件循環基本上是由外部輸入驅動的每個程序(包括遊戲)的代碼核心,它檢查事件隊列中的輸入,進行處理,然後重複最後兩個永遠停止循環直到需要關閉為止。

這裡有兩件事要牢記。首先是事件循環是線性的:在處理完事件1之前,您不處理事件2。

第二個是 WM_CLOSE 消息未“退出程序”。這是一種特殊的輸入,僅此而已。它告訴程序用戶已請求程序關閉當前窗口。程序可以自由地以其代碼說的任何方式對此做出響應,包括完全忽略它。 (這是很不禮貌的事情,但是開發人員有時會這樣做。)最常見的回答之一是詢問用戶“您要在退出前保存嗎?” 和/或提供一個提示。取消關閉請求的方法。

那麼,如果遊戲在保存過程中用戶按下 Alt kbd> + F4 kbd>,會發生什麼情況?請記住第一點:處理是線性的。假設保存是在主線程中進行的(我將在後面進行進一步介紹),該代碼甚至無法檢查事件隊列以查看是否已向它發送了 WM_CLOSE 消息,直到之後保存完成。因此,沒有什麼可打擾的。

總是有可能讓計算機程序同時執行兩項操作。這稱為 multithreading ,可以同時運行兩個或多個線性執行代碼的“線程”。因此有人可能會問:“當 WM_CLOSE 消息進入並得到處理時,它是否保存在另一個線程中?”該問題的答案是,任何執行此操作的開發人員,即使用戶沒有在不適當的時候請求退出的情況下,他們的代碼也可能破壞保存文件的左,右和中心。這是因為保存意味著將當前遊戲狀態的副本寫到光盤上。如果您在不中斷遊戲的情況下進行此操作,則可能在開始保存和完成之間有一些變化,然後保存文件最終會包含一些引用遊戲舊狀態的數據,而某些引用了遊戲的舊狀態。到新狀態,這再沒有任何意義,現在您的保存文件已損壞。

這實際上是任何人都了解多線程的第一件事:如果其中一個(或兩個)都將要更改它們,則切勿讓兩個線程同時觸摸同一數據。

em>不遵循該原則會創建競賽條件,在該條件下,數據將被破壞,並且事情將以奇怪的方式失敗。任何有能力的開發人員都將竭盡所能避免出現競爭情況的情況。因此,開發人員簽入在單獨的線程上執行保存操作的代碼時,其他開發團隊很可能會驚恐地看著它!

TL; DR:如果您的遊戲已經執行了自動保存而沒有損壞自身,則可以安全地假設禮貌地要求關閉遊戲沒有損壞的風險,(這是 Alt kbd> + F4 kbd>也可以),即使您在保存過程中也這樣做了。當警告屏幕告訴您在保存遊戲時不要關閉遊戲時,它指的是關閉電源或其他更為激烈的終止遊戲方式。

評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-第4行)。
**在此處停止**討論。[chat](http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-row-4)。
此答案有[一個元帖子](http://meta.gaming.stackexchange.com/questions/11216/what-do-we-do-with-highly-upvoted-accepted-wrong-answers)。請貢獻您的想法。
Ryan
2016-01-14 23:28:22 UTC
view on stackexchange narkive permalink

任何在寫程序時中斷程序的操作都會破壞保存文件。如果要避免破壞保存內容,請使用遊戲的內置序列退出程序。

在這裡停止討論。如果您有任何要討論的內容,請在[chat](http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-row-4)。
jimmyplaysdrums
2016-01-15 00:16:06 UTC
view on stackexchange narkive permalink

ALT + F4通常可以關閉遊戲。主要問題是這樣做會告訴遊戲您要關閉遊戲,這取決於程序員在未保存遊戲時按下ALT + F4時程序員決定如何處理。

這不是遊戲真正的問題,您可以通過暫停並從菜單中選擇“保存”來保存自己。但是有些遊戲具有“自動保存”功能。他們會在您玩遊戲時自動保存您的遊戲。如果您在其中一個保存過程中使用ALT-F4,則如果遊戲編程錯誤,則很可能會破壞您的保存數據。

如果添加時要求它在保存遊戲時退出遊戲,從技術上講應該先完成保存,然後再執行退出命令,但有時(並非經常發生,但發生)遊戲編程如此糟糕,以至於可能使用多線程進行保存,同時還要處理quit命令。

通常具有“自動保存”功能的遊戲會在屏幕角落出現一個圖標,讓您知道它正在保存。大多數加載屏幕會告訴您“看到此圖標時請勿關閉或退出遊戲”。

以下是一些遊戲示例,它們告訴您有關它們的自動保存圖標的信息: Autosave Loading Screen 1

Autosave Loading Screen 2

TL; DR:通常可以使用ALT + F4關閉遊戲。有一些不太可能但可能的時間,它可能破壞保存的數據,但可能不會。為了安全起見,請使用遊戲內菜單退出遊戲。

在這裡停止討論。如果您有任何要討論的內容,請在[chat](http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-row-4)。
Kevin
2016-01-16 22:50:51 UTC
view on stackexchange narkive permalink

如果應用程序退出時崩潰(這是 Undertale 中的已知問題,則 城市:天際線 龍騰世紀:起源以及許多其他遊戲),那麼在保存過程中請勿退出該遊戲。 @MasonWheeler的答案假設遊戲不會崩潰。崩潰會中止一切,終止所有線程,通常是退出程序的非常突然的方式。

雖然所有寫入可能已經移交給內核(並且將自動完成),但遊戲也可能執行多次寫入(例如 Minecraft 實際上使用多個保存文件必須使用多次寫入技術),在這種情況下,在錯誤的時間中斷可能只會使其中一些寫入完成。此外,Linux(可能還有Mac OS X,我尚未研究)沒有真正的異步寫入( aio _ * 函數實際上只是在a之上運行的同步寫入。用戶空間線程池),這意味著實際上不可能首先在該平台上“手工寫入內核”。

由於您不知道自己的遊戲沒有崩潰的Bug,因此除非您喜歡危險地生活,否則根本不應該Alt + F4。

公平的觀點,但我不同意您的結論。您的結論適用於所有情況,因此將導致:不使用封閉源代碼軟件的任何功能,因為您不知道它沒有任何錯誤。多數民眾贊成在荒謬!
@Zaibis:使用Alt + F4幾乎沒有優勢。為什麼要承擔不必要的風險?
我不是在談論alt f4快捷鍵的優點。我什至和你在這裡。但是關於它的爭論是我真的不這樣認為。
根據記錄,這與開放源代碼還是封閉源代碼無關。任何軟件都可能存在錯誤。您必須逐案判斷收益和風險。我認為Alt + F4不值得。我的回答就是這麼說。
好的,但是您應該記住,以某種方式解釋某件事與以一種體驗方式解釋某事之間是有區別的。您的答案對我來說聽起來像是第二個,而它應該是第一個(因為我們在這裡無法判斷)。我只想澄清一下。
@Zaibis:我有*前者的兩個完整段落*和後者的*一句話*(順便說一下,有人以我已經部分回滾的方式進行了編輯-有關詳細信息,請參見編輯歷史)。
抱歉,我在錯誤的時間閱讀了您的答案並委屈了您。
Undertale中的已知問題?在Undertale中,保存幾乎是即時的,即使如此,該遊戲也不允許您在保存時退出。
Hagen von Eitzen
2016-01-15 02:26:21 UTC
view on stackexchange narkive permalink

根據 Microsoft鍵盤用戶界面指南 Alt + F4 應該“關閉活動項目,或退出活動應用程序。”

在應用程序級別,應該消滅 WM_QUIT 消息。對於未保存或未保存的“文檔”打開的應用程序,這將再次向用戶顯示一條消息,詢問是否保存更改。 因此,如果程序員願意遵守所有這些規範,則 Alt + F4 應該詢問,您是否要保存遊戲狀態。但是,並非所有人都在乎規格,因此在某些遊戲中它可能是安全的,而在某些遊戲中則不是安全的。

“ _應該消失WM_QUIT消息_”,不,它在WM_CLOSE隊列中排隊,默認情況下,它將關閉窗口,但不退出程序。程序必須處理“ WM_CLOSE”以調用“ PostQuitMessage()”,如果處理正確,則應退出程序的主循環。
user101016
2016-01-26 20:20:04 UTC
view on stackexchange narkive permalink

然而,有件事讓我擔心;在Windows中使用alt + F4退出遊戲時,是否可能導致保存的遊戲文件損壞,尤其是在自動保存期間?

簡短答案

這取決於遊戲,我發現ALT + F4通常是關閉遊戲的安全方法。絕對不會發生腐敗,因此可以通過錯誤或錯誤的代碼設計來更好地解釋。

長期答案:

根據 Microsoft的官方文檔

用戶可以通過單擊“關閉”按鈕或使用鍵盤快捷鍵(例如ALT + F4)關閉應用程序窗口。這些操作中的任何一個都會導致窗口接收WM_CLOSE消息。 WM_CLOSE消息使您有機會在關閉窗口之前提示用戶。

因此,使用ALT + F4取決於遊戲如何編程以處理 WM_CLOSE 消息。但是,還有其他需要注意的因素:

  • 其他哪些進程正在運行(例如自動保存)
  • 代碼質量(即潛在的錯誤)

從個人經驗來看,我從未見過在遊戲中期使用ALT + F4時遊戲損壞。我注意到的唯一影響是您還原到最後保存的檢查點/保存文件(取決於遊戲)。我實際上經常使用ALT + F4,而不是單擊2分鐘以嘗試通過菜單退出遊戲。

您應該發現,任何提供保存功能的遊戲都會在特定時間複製遊戲世界。只要能夠加載保存(通常通過菜單中的 Load 選項,但也可以應用於自動將您放置在某些遊戲中最後保存的檢查點上),那麼您應該有信心在遊戲中期ALT + F4是安全的。實際上,您發現使用ALT + F4時可以保存的遊戲。

但是,保存過程中的ALT + F4可能會帶來風險。該代碼將需要專門處理這種情況。基本上是在收到 WM_CLOSE 消息後,使自動保存功能完成運行的情況。

我基本上是說,但是正確編寫代碼可能很棘手。更重要的是,如果您考慮到遊戲可能正在使用線程。在關閉應用程序之前,必須先完成對保存遊戲至關重要的線程。 Windows的不同版本在實現線程的方式上也有細微的差異(您使用的庫也是如此,即使C ++標準庫在版本之間也會發生變化)。

當涉及線程時,很多事情都會出錯。錯誤的代碼和不良的設計是兩個因素。根據何時(在此過程中)按ALT + F4鍵,可能還會發生一些略有不同的事情。如果在寫入任何保存文件之前按此鍵,您可能會得到不同的行為。

許多提供自動保存功能的遊戲都有一條警告消息,告訴您在自動保存期間不要關閉計算機電源。我永遠不會認為ALT + F4是中途保存的好主意。這可能是安全的,但不能保證。從技術上講,警告消息所討論的是由於在過程中斷電而可能部分寫入保存文件的情況,但是我還是要保持謹慎。您投入遊戲的時間損失非常令人沮喪。為什麼要冒險?

要考慮的另一點是保存“文件”的目的地。現在,越來越多的遊戲從本地文件轉移到基於雲的服務和其他Web服務上。在這種保存過程中,ALT + F4可能會部分寫入數據(並因此造成損壞)。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...