50 votes

L'utilisation de ALT + F4 pour fermer un jeu peut-elle corrompre les données de sauvegarde ?

Je suis assez nouveau dans le jeu sur PC après avoir eu une PS3. Je ne suis pas passé à la PS4 mais aux jeux sur PC. Jusqu'à présent, tout est génial.

Cependant, il y a une chose qui me préoccupe : lorsque l'on quitte un jeu en utilisant alt + F4 sous Windows, le fichier de sauvegarde du jeu pourrait-il être corrompu, notamment lors de la sauvegarde automatique ?


Attention. Ces réponses sont générales et peuvent ne pas s'appliquer à votre jeu spécifique et dans certaines circonstances peu communes, le fait d'appuyer sur Alt-F4 pourrait corrompre votre fichier de sauvegarde de toute façon. (Exemple : le jeu s'exécute dans Dosbox, ou un émulateur, ou un terminal, ou vous appuyez sur Alt-F4 sur une fenêtre qui est suspendue et confirmez ensuite que vous voulez tuer le processus).

L'utilisation de ALT-F4 pour quitter un jeu est à vos risques et périls.

108voto

Mason Wheeler Points 2246

En tant que programmeur, les deux réponses postées jusqu'à présent sont incorrectes. Bien qu'il soit possible d'imaginer une situation hypothétique dans laquelle le fait d'appuyer sur la touche Alt + F4 corromprait une sauvegarde en cours, le faire effectivement Il faudrait que les développeurs fassent exprès de bousiller le système de sauvegarde.

Du point de vue du codage, l'utilisateur qui appuie sur Alt + F4 ne "ferme pas la fenêtre active" et n'interrompt pas le programme. Ce qu'il fait, c'est que Windows place un WM_CLOSE dans la file d'attente des événements du programme. C'est tout.

La file d'attente d'événements, comme son nom l'indique, est une file d'attente d'événements à traiter par le programme ; il s'agit principalement d'entrées provenant de l'utilisateur. Au cœur du code de pratiquement tous les programmes pilotés par des entrées externes, y compris les jeux, se trouve ce que l'on appelle une file d'attente d'événements. boucle d'événement qui vérifie les entrées dans la file d'attente des événements, les traite, puis répète les deux dernières étapes en boucle jusqu'à ce qu'il soit temps de s'arrêter.

Il y a deux choses à garder à l'esprit ici. La première est que la boucle d'événements est linéaire : vous ne traitez pas l'événement n° 2 avant d'avoir fini de traiter l'événement n° 1.

Et la seconde est qu'un WM_CLOSE ne permet pas de "quitter le programme". C'est un type spécial d'entrée, rien de plus. Il indique au programme que l'utilisateur a demandé au programme de fermer la fenêtre en cours. Le programme est libre de répondre à ce message de la manière que son code lui indique, y compris en l'ignorant complètement. (C'est une chose très impolie à faire, mais les développeurs le font parfois.) L'une des réponses les plus courantes consiste à demander à l'utilisateur "Voulez-vous économiser avant de démissionner ?" et/ou fournir un moyen d'annuler la demande de fermeture.

Alors que se passe-t-il si l'utilisateur appuie sur Alt + F4 pendant que le jeu est en cours de sauvegarde ? Gardez à l'esprit le premier point : le traitement est linéaire. En supposant que la sauvegarde se déroule dans le thread principal - ce que je vais aborder un peu plus loin - le code ne peut même pas vérifier la file d'attente des événements pour voir si un message WM_CLOSE jusqu'à ce que la sauvegarde soit terminée. Il n'y a donc rien à interrompre.

Il est toujours possible qu'un programme informatique fasse deux choses à la fois. C'est ce qu'on appelle multithreading Il s'agit de l'exécution de deux ou plusieurs "fils" linéaires d'exécution de code en même temps. Ainsi, quelqu'un pourrait se demander "que se passe-t-il si l'on enregistre dans un autre thread pendant que l'autre thread est en cours d'exécution ? WM_CLOSE le message arrive et est traité ?" La réponse à cette question est que si les développeurs font cela, leur code est susceptible de corrompre les fichiers de sauvegarde à gauche, à droite et au centre, même si l'utilisateur ne demande pas à quitter le jeu à un moment inopportun. En effet, sauvegarder signifie écrire sur le disque une copie de l'état du jeu à ce moment précis. Si vous faites cela sans interrompre le jeu, il est possible que quelque chose change entre le moment où vous commencez à sauvegarder et celui où vous terminez, et le fichier de sauvegarde se retrouve alors avec des données qui font référence à l'ancien état du jeu et d'autres qui font référence au nouvel état, qui n'ont aucun sens ensemble, et vous avez maintenant un fichier de sauvegarde corrompu.

C'est en fait l'une des premières choses que l'on apprend sur le multithreading : ne laissez jamais deux threads toucher les mêmes données en même temps si l'un (ou les deux) d'entre eux va les modifier. Ne pas suivre ce principe crée conditions de course où les données sont corrompues et où les choses échouent de façon bizarre. Tout développeur compétent s'efforcera d'éviter les scénarios dans lesquels une condition de course pourrait survenir. Ainsi, un développeur qui vérifie le code qui effectue une sauvegarde sur un thread séparé sera très probablement regardé avec horreur par le reste de l'équipe de développement !

TL;DR : Si votre jeu effectue déjà des sauvegardes automatiques sans se corrompre, on peut supposer qu'il n'y a pas de risque de corruption en demandant poliment au jeu de s'arrêter (ce qui est ce que le Alt + F4 ), même si vous le faites au milieu d'une sauvegarde. Lorsque des écrans d'avertissement vous disent de ne pas arrêter le jeu pendant la sauvegarde, il s'agit de mise hors tension ou d'autres moyens plus radicaux de mettre fin au jeu.

27voto

Ryan Points 1390

Tout ce qui interrompt le programme pendant qu'il écrit peut corrompre le fichier de sauvegarde. Si vous voulez éviter de corrompre les sauvegardes, utilisez la séquence intégrée du jeu pour quitter le programme.

17voto

Marco Points 11

ALT+F4 permet généralement d'arrêter un jeu. Le problème principal est que cela indique au jeu que vous souhaitez qu'il s'arrête et cela dépend de la façon dont le programmeur a décidé de gérer le cas où un utilisateur appuie sur ALT+F4 alors que le jeu n'a pas été sauvegardé.

Ce n'est pas vraiment un problème pour les jeux que vous sauvegardez vous-même en mettant en pause et en sélectionnant "sauvegarder" dans le menu. Mais certains jeux ont un système de "sauvegarde automatique". Ils sauvegardent automatiquement votre jeu pendant que vous jouez. Si vous appuyez sur ALT-F4 pendant l'un de ces processus de sauvegarde, vous risquez fort de corrompre vos données de sauvegarde si le jeu a été mal programmé.

Si vous lui demandez de quitter le jeu pendant qu'il sauvegarde, il devrait techniquement terminer la sauvegarde avant d'exécuter votre commande de quitter, mais il arrive (pas souvent mais cela arrive) qu'un jeu soit si mal programmé qu'il utilise le multithreading pour sauvegarder tout en traitant votre commande de quitter.

En général, les jeux qui disposent d'une fonction de sauvegarde automatique ont une icône qui apparaît dans un coin de l'écran pour vous indiquer que la sauvegarde est en cours. La plupart des écrans de chargement vous diront "N'éteignez pas ou ne quittez pas le jeu lorsque vous voyez cette icône".

Voici quelques exemples de jeux qui vous informent sur leurs icônes de sauvegarde automatique : Autosave Loading Screen 1

Autosave Loading Screen 2

TL;DR : Il est généralement correct d'utiliser ALT+F4 pour fermer un jeu. Il y a quelques cas improbables mais possibles où cela pourrait corrompre les données de sauvegarde, mais ce n'est probablement pas le cas. Si vous voulez être sûr, utilisez le menu du jeu pour quitter le jeu.

9voto

Kevin Points 4547

Si l'application crashs quand il s'arrête (ce qui est un problème connu dans Undertale , Villes : Skylines , Dragon Age : Origins et beaucoup d'autres jeux), vous ne devez pas quitter le jeu en plein milieu de la sauvegarde. La réponse de @MasonWheeler suppose que le jeu ne se plante pas. Un crash interrompt tout, met fin à tous les threads, et est généralement une manière très abrupte de quitter un programme.

Bien qu'il soit possible que toutes les écritures aient déjà été transmises au noyau (et qu'elles se terminent automatiquement), il est également possible que le jeu effectue plusieurs écritures (par ex. Minecraft en fait utilise plusieurs fichiers de sauvegarde y doit utiliser une technique d'écriture multiple), auquel cas une interruption au mauvais moment pourrait ne laisser que certaines de ces écritures terminées. De plus, Linux (et peut-être Mac OS X, je n'ai pas cherché) n'a pas de véritables écritures asynchrones (la fonction aio_* fonctions ne sont en fait que des écritures synchrones s'exécutant au-dessus d'un pool de threads en espace utilisateur), ce qui signifie qu'il n'est pas vraiment possible de "transférer les écritures au noyau" en premier lieu sur cette plate-forme.

Desde vous ne pouvez pas savoir si votre jeu n'a pas un bug de plantage vous ne devriez pas utiliser Alt+F4 du tout, sauf si vous aimez vivre dangereusement.

5voto

Hagen von Eitzen Points 159

Selon Directives de Microsoft pour l'interface utilisateur du clavier , Alt + F4 devrait "Fermer l'élément actif, ou quitter l'application active".

Au niveau de l'application, cela devrait dispatcher une WM_QUIT message. Pour les applications dont les "documents" ouverts ne sont pas sauvegardés ou sont corrompus, l'utilisateur devrait également recevoir un message lui demandant s'il souhaite ou non sauvegarder les modifications. Donc, si les programmeurs se souciaient de respecter toutes ces spécifications, Alt + F4 devrait demandez à vous demande si vous voulez sauvegarder l'état du jeu. Cependant, tout le monde ne se soucie pas des spécifications, donc cela peut être sûr sur certains jeux, et pas sur d'autres.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X