Frage:
Könnte die Verwendung von ALT + F4 zum Schließen eines Spiels das Speichern von Daten beschädigen?
Haider
2016-01-14 23:23:00 UTC
view on stackexchange narkive permalink

Ich bin ziemlich neu im PC-Gaming, nachdem ich eine PS3 habe.Ich habe nicht auf PS4 umgestellt, sondern bin auf PC-Spiele umgestiegen.Bisher ist alles großartig.

Es gibt jedoch eine Sache, die mich beunruhigt.Kann dies beim Beenden eines Spiels mit alt kbd> + F4 kbd> unter Windows dazu führen, dass die gespeicherte Spieldatei beschädigt wird, insbesondere während der automatischen Speicherung?


Warnung. Diese Antworten sind allgemein gehalten und gelten möglicherweise nicht für Ihr spezifisches Spiel. Unter ungewöhnlichen Umständen kann das Drücken von Alt-F4 Ihre Sicherungsdatei trotzdem beschädigen.(Beispiel: Das Spiel wird in Dosbox oder einem Emulator oder einem Terminal ausgeführt, oder Sie drücken Alt-F4 in einem Fenster, das hängt, und bestätigen dann, dass Sie den Prozess beenden möchten.)

Verwendung von ALT-F4 zum Beenden eines Spiels erfolgt auf eigenes Risiko.

Ich kann mir vorstellen, dass es die gespeicherten Daten nur beeinflusst, wenn Sie Alt + F4 drücken, während das Spiel Ihre Datei speichert.Ich kann mir nicht vorstellen, warum es sonst das Speichern von Daten bewirken würde, es macht einfach keinen Sinn.
Sechs antworten:
Mason Wheeler
2016-01-15 02:02:53 UTC
view on stackexchange narkive permalink

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.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Dieses Gespräch wurde [in den Chat verschoben] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-Zeile 4).
** Stop ** Diskussion hier.Neue Diskussionen finden Sie in [chat] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-row-4).
Diese Antwort hat [einen Meta-Beitrag] (http://meta.gaming.stackexchange.com/questions/11216/what-do-we-do-with-highly-upvoted-accepted-wrong-answers).Bitte bringen Sie Ihre Gedanken ein.
Ryan
2016-01-14 23:28:22 UTC
view on stackexchange narkive permalink

Alles, was das Programm während des Schreibens unterbricht, kann die Sicherungsdatei beschädigen.Wenn Sie vermeiden möchten, dass Spielstände beschädigt werden, verwenden Sie die integrierte Sequenz des Spiels, um das Programm zu beenden.

Stoppen Sie die Diskussion hier.Wenn Sie etwas zu besprechen haben, tun Sie dies bitte in [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 ist im Allgemeinen in Ordnung, um ein Spiel zu beenden. Das Hauptproblem ist, dass dies dem Spiel mitteilt, dass es heruntergefahren werden soll, und es hängt davon ab, wie der Programmierer vorgegangen ist, wenn ein Benutzer ALT + F4 drückt, wenn das Spiel nicht gespeichert wurde.

Dies ist kein wirkliches Problem für ein Spiel, das Sie selbst speichern, indem Sie pausieren und "Speichern" aus dem Menü auswählen. Aber einige Spiele haben "Autosaving". Sie speichern Ihr Spiel automatisch, während Sie spielen. Wenn Sie ALT-F4 während eines dieser Speichervorgänge verwenden, können Ihre Speicherdaten sehr gut beschädigt werden, wenn das Spiel schlecht programmiert wurde.

Wenn Sie hinzufügen, bitten Sie es, das Spiel zu beenden, während es gespeichert wird. Technisch sollte das Speichern abgeschlossen sein, bevor Sie Ihren Befehl zum Beenden ausführen. Es gibt jedoch (nicht oft, aber es kommt vor) Zeiten, in denen ein Spiel programmiert wurde So schlecht, dass Multithreading zum Speichern verwendet werden kann, während gleichzeitig der Befehl zum Beenden verarbeitet wird.

Normalerweise haben Spiele mit "Autosave" ein Symbol, das irgendwo in der Ecke des Bildschirms angezeigt wird, um Sie darüber zu informieren, dass es gespeichert wird. Auf den meisten Ladebildschirmen wird angezeigt, dass das Spiel nicht ausgeschaltet oder beendet werden soll, wenn dieses Symbol angezeigt wird.

Hier einige Beispiele für Spiele, in denen Sie über die Symbole zum automatischen Speichern informiert werden: Autosave Loading Screen 1

Autosave Loading Screen 2

TL; DR: Es ist im Allgemeinen in Ordnung, ALT + F4 zum Schließen eines Spiels zu verwenden. Es gibt einige unwahrscheinliche, aber mögliche Zeiten, in denen möglicherweise gespeicherte Daten beschädigt werden könnten, dies wird jedoch wahrscheinlich nicht der Fall sein. Wenn Sie sicher sein möchten, verwenden Sie das Menü im Spiel, um das Spiel zu beenden.

Stoppen Sie die Diskussion hier.Wenn Sie etwas zu besprechen haben, tun Sie dies bitte in [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

Wenn die Anwendung beim Beenden abstürzt (ein bekanntes Problem in Undertale , Cities: Skylines , Dragon Age: Origins und viele andere Spiele), dann sollten Sie es nicht mitten im Speichern beenden. @ MasonWheelers Antwort geht davon aus, dass das Spiel nicht abstürzt. Das Abstürzen bricht alles ab, beendet alle Threads und ist im Allgemeinen eine sehr abrupte Methode zum Beenden eines Programms.

Es ist zwar möglich, dass alle Schreibvorgänge bereits an den Kernel übergeben wurden (und automatisch abgeschlossen werden). Es ist auch möglich, dass das Spiel mehrere Schreibvorgänge ausführt (z. B. Minecraft verwendet tatsächlich mehrere Sicherungsdateien und muss eine Mehrfachschreibtechnik verwenden). In diesem Fall kann eine Unterbrechung zur falschen Zeit dazu führen, dass nur einige dieser Schreibvorgänge abgeschlossen sind. Darüber hinaus verfügt Linux (und möglicherweise Mac OS X, das ich nicht untersucht habe) nicht über echte asynchrone Schreibvorgänge (die Funktionen aio_ * sind eigentlich nur synchrone Schreibvorgänge, die über a ausgeführt werden Userspace-Thread-Pool), was bedeutet, dass es auf dieser Plattform überhaupt nicht möglich ist, "Handschriften an den Kernel abzugeben".

Da Sie nicht wissen können, dass Ihr Spiel keine hat Bei einem Absturzfehler sollten Sie Alt + F4 überhaupt nicht verwenden, es sei denn, Sie möchten gefährlich leben.

fairer Punkt, aber ich bin mit Ihrer Schlussfolgerung nicht einverstanden.Ihre Schlussfolgerung gilt für alles, was dazu führen würde: Verwenden Sie keine Funktion von Closed-Source-Software, da Sie nicht wissen können, dass es keine Fehler gibt.Und das ist lächerlich!
@Zaibis: Die Verwendung von Alt + F4 hat wenig bis gar keinen Vorteil.Warum unnötige Risiken eingehen?
Ich streite nicht über die Vorteile der Verknüpfung alt f4.Ich bin sogar bei dir hier.Aber die Argumente, die sich darauf stützen, sehe ich wirklich nicht so.
Für die Aufzeichnung geht es nicht um Open Source oder Closed Source.Jede Software kann Fehler aufweisen.Sie müssen die Vorteile und Risiken von Fall zu Fall beurteilen.Ich halte Alt + F4 für nicht wert.Das ist alles, was meine Antwort sagt.
Ok, aber Sie sollten sich daran erinnern, dass es einen Unterschied gibt, etwas so zu erklären, wie es ist, und etwas so zu erklären, wie Sie es erleben.Ihre Antwort klingt für mich wie die zweite, während es die erste sein sollte (da wir hier nicht beurteilen können).Nichts anderes versuche ich zu klären.
@Zaibis: Ich habe * zwei ganze Absätze * des ersteren und * einen Satz * des letzteren (die übrigens jemand auf eine Weise bearbeitet hat, die ich seitdem teilweise zurückgesetzt habe - siehe Bearbeitungsverlauf für Details).
Es tut mir leid, ich habe Ihre Antwort zur falschen Zeit gelesen und Ihnen Unrecht getan.
Bekanntes Problem in Undertale?Das Speichern erfolgt in Undertale ziemlich sofort, und selbst dann können Sie das Spiel nicht beenden, während es gespeichert wird.
Hagen von Eitzen
2016-01-15 02:26:21 UTC
view on stackexchange narkive permalink

Gemäß Microsoft-Richtlinien für Tastaturbenutzer Inerface sollte Alt + F4 "das aktive Element schließen oder die aktive Anwendung beenden".

Auf Anwendungsebene sollte dies eine WM_QUIT -Nachricht auslösen.Bei Anwendungen mit nicht gespeicherten oder verschmutzten "Dokumenten" sollte der Benutzer erneut eine Meldung erhalten, in der er gefragt wird, ob die Änderungen gespeichert werden sollen oder nicht.Wenn sich die Programmierer darum kümmern, all diese Spezifikationen einzuhalten, sollte Alt + F4 Sie fragen , ob Sie den Spielstatus speichern möchten.Allerdings kümmert sich nicht jeder um Spezifikationen, so dass es bei einigen Spielen sicher und bei einigen nicht sicher sein kann.

"_das sollte eine WM_QUIT-Nachricht_ auslösen", nein, es wird eine "WM_CLOSE" in die Warteschlange gestellt, die standardmäßig das Fenster schließt, das Programm jedoch nicht beendet."WM_CLOSE" muss vom Programm verarbeitet werden, um "PostQuitMessage ()" aufzurufen, das bei ordnungsgemäßer Behandlung die Hauptschleife des Programms verlassen sollte.
user101016
2016-01-26 20:20:04 UTC
view on stackexchange narkive permalink

Es gibt jedoch eine Sache, die mich beunruhigt. Könnte dies beim Beenden eines Spiels mit Alt + F4 unter Windows dazu führen, dass die gespeicherte Spieldatei beschädigt wird, insbesondere während der automatischen Speicherung?

Die Kurzantwort

Es hängt vom Spiel ab, und ich habe festgestellt, dass ALT + F4 im Allgemeinen eine sichere Möglichkeit ist, ein Spiel zu schließen. Korruption ist niemals beabsichtigt und wird daher besser durch Fehler oder schlechtes Code-Design erklärt.

Die lange Antwort:

Laut der offiziellen Dokumentation von Microsoft:

Der Benutzer kann ein Anwendungsfenster schließen, indem er auf die Schaltfläche Schließen klickt oder eine Tastenkombination wie ALT + F4 verwendet. Jede dieser Aktionen bewirkt, dass das Fenster eine WM_CLOSE-Nachricht empfängt. Die WM_CLOSE-Nachricht bietet Ihnen die Möglichkeit, den Benutzer vor dem Schließen des Fensters aufzufordern.

Daher hängt die Verwendung von ALT + F4 davon ab, wie das Spiel für die Verarbeitung von WM_CLOSE programmiert wurde. Code> Nachrichten. Es sind jedoch noch andere Faktoren zu beachten:

  • Welche anderen Prozesse werden ausgeführt (z. B. automatische Speicherung)
  • Codequalität (dh potenzielle Fehler)

Aus persönlicher Erfahrung habe ich bei der Verwendung von ALT + F4 während des Spiels noch nie eine Spielbeschädigung gesehen. Die einzigen Auswirkungen, die mir aufgefallen sind, sind, dass Sie zu Ihrem zuletzt gespeicherten Prüfpunkt / Ihrer zuletzt gespeicherten Datei zurückkehren (abhängig vom Spiel). Ich benutze ALT + F4 tatsächlich oft und ziehe es vor, 2 Minuten lang herumzuklicken, um ein Spiel über Menüs zu beenden.

Sie sollten feststellen, dass jedes Spiel, das eine Speicherfunktion bietet, eine Kopie der Spielwelt erstellt an einem bestimmten Punkt. Solange es möglich ist, den Speicher zu laden (normalerweise über die Option Laden im Menü, kann aber auch angewendet werden, um Sie in einigen Spielen automatisch an Ihrem zuletzt gespeicherten Kontrollpunkt zu platzieren), sollten Sie sicher sein dass ALT + F4 mitten im Spiel sicher ist. Tatsächlich finden Sie Spiele, die sich bei Verwendung von ALT + F4 zum Speichern anbieten.

ALT + F4 während des Speichervorgangs kann jedoch ein Risiko bergen. Der Code müsste dieses Szenario speziell behandeln. Grundsätzlich muss die Funktion zum automatischen Speichern beendet werden, sobald eine WM_CLOSE -Nachricht empfangen wurde.

Ich sage im Grunde, aber es kann schwierig sein, den richtigen Code zu finden. Umso mehr, wenn Sie berücksichtigen, dass das Spiel wahrscheinlich Threads verwendet. Die für das Speichern des Spiels wichtigen Threads müssen vor dem Schließen der Anwendung abgeschlossen sein. Verschiedene Windows-Versionen weisen auch geringfügige Unterschiede in der Implementierung von Threads auf (ebenso wie die von Ihnen verwendete Bibliothek, selbst die C ++ - Standardbibliothek ändert sich zwischen den Versionen).

Beim Threading können so viele Dinge schief gehen . Buggy-Code und schlechtes Design sind zwei Faktoren. Es ist auch möglich, dass etwas andere Dinge auftreten, je nachdem, wann (während des Vorgangs) Sie ALT + F4 drücken. Möglicherweise tritt ein anderes Verhalten auf, wenn Sie darauf drücken, bevor eine Sicherungsdatei geschrieben wurde.

Bei vielen Spielen, die das automatische Speichern anbieten, wird eine Warnmeldung angezeigt, die Sie auffordert, den Computer während des automatischen Speicherns nicht auszuschalten . Ich würde niemals in Betracht ziehen, dass ALT + F4 eine gute Idee ist. Es mag sicher sein, aber es gibt keine Garantie. Technisch gesehen handelt es sich in den Warnmeldungen um Szenarien, in denen eine Sicherungsdatei möglicherweise teilweise geschrieben wird, weil die Stromversorgung während des Prozesses unterbrochen wurde, aber ich bin gerne vorsichtig. Stunden zu verlieren, die Sie in ein Spiel stecken, ist sehr frustrierend. Warum das Risiko eingehen?

Ein weiterer zu berücksichtigender Punkt ist das Ziel des Speicherns von "Dateien". Immer mehr Spiele verlagern sich von lokalen Dateien zu Cloud-basierten Diensten und anderen Webdiensten. ALT + F4 während eines solchen Speichervorgangs könnte möglicherweise die Daten teilweise schreiben (und daher eine Beschädigung verursachen).



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...