ALT + F4でゲームを終了すると、セーブデータが破損する可能性がありますか?

私はPS3を持っていた後、PCゲームをするのはかなり初めてです。PS4への乗り換えはせず、PCゲームに移行しました。今のところ、すべてが素晴らしいです。

Windowsでalt+F4でゲームを終了するとき、特に自動保存中にセーブゲームファイルを破損させることがあるのでしょうか?


Warning. これらの回答は一般的なものであり、あなたの特定のゲームに適用されないかもしれませんし、まれな状況下では、Alt-F4を押すと、とにかくセーブファイルが壊れるかもしれません。(例:ゲームがDosboxやエミュレータ、ターミナルで動作している場合、ハングアップしたウィンドウでAlt-F4を押して、プロセスを終了させるかどうか確認する場合など)。

ALT-F4によるゲーム終了は自己責任でお願いします。

ソリューション

プログラマーとして、これまでに投稿された両方の回答は正しくありません。 Alt+F4 を押すと、進行中のセーブが壊れるという仮定を思いつくことはできますが、実際にそうするには、開発者がかなり意図的にセーブシステムを台無しにする必要があります。

コーディングの観点からは、ユーザーがAlt+F4を押してもアクティブウィンドウは閉じませんし、プログラムの中断も起こりません。 それだけです。

イベントキューはその名の通り、プログラムが処理するイベントのキューで、そのほとんどはユーザーからの入力です。 ゲームも含め、外部からの入力で動くすべてのプログラムのコードの中心は、イベントループと呼ばれるもので、イベントキューの入力をチェックし、それを処理し、シャットダウンするまで永遠にループの中で最後の2ステップを繰り返します。

ここで注意しなければならないことが2つあります。 1つ目は、イベントループは直線的なものであるということです。イベント#1 の処理が終わるまで、イベント#2 の処理は行われません。

そしてもうひとつは、WM_CLOSEメッセージはプログラムを終了させるものではない、ということです。 これは特別なタイプの入力であり、それ以上のものではありません。 このメッセージは、ユーザーが現在のウィンドウを閉じるように要求していることをプログラムに伝えます。 (これは非常に失礼なことですが、開発者は時々これを行います。) 最も一般的な反応の1つは、ユーザに "Do you want to save before quitting?" と尋ねたり、閉じる要求をキャンセルする方法を提供したりすることです。

では、ゲームがセーブしている最中にユーザーが Alt+F4 を押したらどうなるでしょうか。 最初のポイントである「処理はリニアであること」を念頭に置いてください。 保存がメインスレッドで行われていると仮定すると、保存が完了するまで、コードはイベントキューをチェックして WM_CLOSE メッセージが送られてきたかどうかを確認することすらできません。 したがって、割り込むことはできません。

コンピュータのプログラムは、常に2つのことを同時に行うことができます。 これはマルチスレッドと呼ばれ、2つ以上のスレッドを同時に実行することができます。 WM_CLOSE` メッセージが来て処理されている間、別のスレッドで保存していたらどうなるのでしょうか?" この質問に対する答えは、これを行う開発者は、ユーザーが不適切な瞬間に終了を要求しなくても、コードが保存ファイルを破損する可能性があるということです。 なぜなら、セーブとは、その時点のゲーム状態のコピーをディスクに書き出すことだからです。 ゲームを中断せずにこれを行うと、セーブを始めてから終了するまでの間に何かが変わり、セーブファイルには古いゲームの状態を示すデータと新しい状態を示すデータが混在してしまい、それらが一緒になって意味をなさず、破損したセーブファイルができてしまう可能性があります。

これはマルチスレッドについて最初に学ぶことの1つです。*この原則に従わない場合、データが破損し、物事が奇妙な方法で失敗する[レースコンディション][1]を作成します。 有能な開発者であれば、レースコンディションが発生するようなシナリオを避けるために、わざわざ自分の道を歩むものです。 ですから、ある開発者が別のスレッドで保存を実行するコードをチェックインすると、他の開発チームからは恐怖の目で見られる可能性が高いのです!

TL;DR:あなたのゲームが既に自身を破損することなくオートセーブを実行しているなら、たとえ保存の最中にそうしたとしても、丁寧にシャットダウンするようにゲームに要求しても破損の危険はないと仮定するのは安全です(これは Alt+F4

解説 (3)

書き込み中にプログラムを中断させると、セーブファイルが壊れる可能性があります。セーブファイルの破損を避けたい場合は、ゲームに組み込まれたシーケンスを使ってプログラムを終了させてください。

解説 (1)

ALT+F4は一般的にゲームをシャットダウンするのに適しています。主な問題は、そうすることでゲームにシャットダウンしてほしいことを伝えることで、それはプログラマーが、ゲームが保存されていないときにユーザーがALT+F4を押したときにどう処理するかに依存します。

これは、一時停止してメニューからセーブを選択するようなゲームではあまり問題にはなりません。しかし、いくつかのゲームにはオートセーブ機能があります。ゲームによっては、プレイ中に自動的にセーブされるものもあります。もし、このようなセーブ中にALT-F4をすると、ゲームのプログラムが悪い場合、セーブデータが壊れてしまう可能性があります。

もし、保存中にゲームを終了するように指示すれば、技術的には終了コマンドを実行する前に保存が終了するはずですが、ゲームがひどくプログラムされている場合、マルチスレッドを使用して保存しながら終了コマンドを処理することがあります(あまりないことですが、よくあります)。

通常、オートセーブのあるゲームでは、画面の隅にアイコンが表示され、セーブ中であることを知らせてくれます。ほとんどのローディング画面では、このアイコンが表示されてもゲームを終了したり電源を切ったりしないでください、と表示されます。

以下に、オートセーブアイコンについて教えてくれるゲームの例をいくつか挙げておきます。 オートセーブローディングスクリーン11

オートセーブローディングスクリーン22

**ALT+F4でゲームを終了するのは一般的にOKです。しかし、このような場合、セーブデータが破損する可能性がありますが、おそらく破損することはありません。もし、安全を期すなら、ゲーム内のメニューでゲームを終了してください。

解説 (1)