Als Programmierer sind beide bisher veröffentlichten Antworten falsch. Während es möglich ist, eine hypothetische Situation zu finden, in der das Drücken von Alt kbd> + F4 kbd> einen laufenden Speichervorgang beschädigen würde, würde dies tatsächlich erfordern Entwickler müssen ganz bewusst alles daran setzen, das Speichersystem zu vermasseln.
Aus Codierungssicht tut der Benutzer, der Alt kbd> + F4 kbd> drückt, dies nicht "Schließen Sie das aktive Fenster" und "unterbrechen Sie das Programm nicht". Dies bewirkt, dass Windows eine WM_CLOSE
-Nachricht in die Ereigniswarteschlange des Programms einfügt. Das ist alles.
Die Ereigniswarteschlange ist, wie der Name schon sagt, eine Warteschlange mit Ereignissen, die das Programm verarbeiten kann. Dies besteht hauptsächlich aus Eingaben des Benutzers. Das Herzstück des Codes für praktisch jedes Programm, das von externen Eingaben gesteuert wird, einschließlich Spielen, ist eine sogenannte Ereignisschleife , die nach Eingaben in der Ereigniswarteschlange sucht, diese verarbeitet und dann die letzten beiden wiederholt Schritte in einer Schleife für immer, bis es Zeit ist, herunterzufahren.
Hier sind zwei Dinge zu beachten. Die erste ist, dass die Ereignisschleife eine lineare Sache ist: Sie verarbeiten Ereignis Nr. 2 erst, wenn Sie mit der Verarbeitung von Ereignis Nr. 1 fertig sind.
Und die zweite ist, dass ein WM_CLOSE
message "beendet das Programm nicht". Es ist eine spezielle Art der Eingabe, nichts weiter. Es teilt dem Programm mit, dass der Benutzer angefordert hat, dass das Programm das aktuelle Fenster schließt. Das Programm kann darauf reagieren, wie es der Code vorschreibt, einschließlich des vollständigen Ignorierens. (Dies ist eine sehr unhöfliche Sache, aber Entwickler tun es gelegentlich.) Eine der häufigsten Antworten besteht darin, den Benutzer "Möchten Sie vor dem Beenden speichern?" zu fragen und / oder eine Möglichkeit, die Abschlussanforderung abzubrechen.
Was passiert also, wenn der Benutzer Alt kbd> + F4 kbd> drückt, während das Spiel gerade gespeichert wird? Beachten Sie den ersten Punkt: Die Verarbeitung erfolgt linear. Unter der Annahme, dass das Speichern im Hauptthread stattfindet - worauf ich noch etwas näher eingehen werde -, kann der Code die Ereigniswarteschlange nicht einmal überprüfen, um festzustellen, ob ihm erst danach eine WM_CLOSE
-Nachricht gesendet wurde Das Speichern ist abgeschlossen. Daher gibt es nichts zu unterbrechen.
Es ist immer möglich, dass ein Computerprogramm zwei Dinge gleichzeitig ausführt. Dies wird als Multithreading bezeichnet, bei dem zwei oder mehr lineare "Threads" der Codeausführung gleichzeitig ausgeführt werden. Jemand könnte also fragen: "Was ist, wenn es in einem anderen Thread gespeichert wird, während die Nachricht WM_CLOSE
eingeht und verarbeitet wird?" Die Antwort auf diese Frage lautet, dass Entwickler, die dies tun, ihren Code wahrscheinlich die Sicherungsdateien links, rechts und zentrieren beschädigen, selbst ohne dass der Benutzer zu einem ungünstigen Zeitpunkt eine Beendigung anfordert. Dies liegt daran, dass beim Speichern eine Kopie des aktuellen Spielstatus auf eine Disc geschrieben werden muss. Wenn Sie dies tun, ohne das Spiel zu unterbrechen, kann sich zwischen dem Beginn des Speichervorgangs und dem Ende des Spiels möglicherweise etwas ändern. In der Sicherungsdatei werden dann einige Daten angezeigt, die sich auf den alten Status des Spiels beziehen, und einige, die sich darauf beziehen in den neuen Zustand, der zusammen keinen Sinn ergibt, und Sie haben jetzt eine beschädigte Sicherungsdatei.
Dies ist tatsächlich eines der ersten Dinge, die jemand über Multithreading lernt: Lassen Sie niemals zu, dass zwei Threads gleichzeitig dieselben Daten berühren, wenn einer (oder beide) sie ändern wird. Die Nichtbeachtung dieses Prinzips führt zu Rennbedingungen, bei denen Daten beschädigt werden und Dinge auf bizarre Weise fehlschlagen. Jeder kompetente Entwickler wird alles daran setzen, Szenarien zu vermeiden, in denen eine Rennbedingung auftauchen würde. Ein Entwickler, der Code eincheckt, der einen separaten Thread speichert, wird vom Rest des Entwicklerteams höchstwahrscheinlich mit Entsetzen betrachtet!
TL; DR: Wenn Ihr Das Spiel führt bereits automatische Speicherungen durch, ohne sich selbst zu beschädigen. Es ist davon auszugehen, dass kein Korruptionsrisiko besteht, wenn das Spiel höflich zum Herunterfahren aufgefordert wird (was Alt kbd> + F4 kbd> tut ,) auch wenn Sie dies mitten in einem Save tun. Wenn Warnbildschirme Sie auffordern, das Spiel während des Speicherns nicht herunterzufahren, bezieht sich dies auf Ausschalten des Stroms oder andere drastischere Methoden zum Beenden des Spiels.