¿Podría usar ALT + F4 para cerrar un juego corrupto Guardar datos?

Soy bastante nuevo en los juegos de PC después de tener una PS3. No cambié a PS4, sino que fui a los juegos de PC. Hasta ahora, todo es increíble.

Sin embargo hay una cosa que me preocupa; Al salir de un juego usando alt + F4 en Windows, ¿podría causar que el archivo guardado del juego se corrompa, especialmente durante el guardado automático?


Advertencia. Estas respuestas son generales y es posible que no se apliquen a tu juego específico y, en algunas circunstancias poco comunes, presionar Alt-F4 podría dañar tu archivo guardado de todos modos. (Ejemplo: el juego se ejecuta en Dosbox, un emulador, un terminal o si presionas Alt-F4 en una ventana que está colgada y luego confirmas que quieres finalizar el proceso).

     

El uso de ALT-F4 para salir de un juego es bajo su propio riesgo.

48
Imagino que solo afecta los datos guardados si Alt + F4 mientras el juego está guardando tu archivo. No puedo imaginar por qué otra cosa tendría efecto guardar los datos de lo contrario, simplemente no tiene sentido.
agregado el autor DJ Aftershock, fuente

6 Respuestas

Como programador, ambas respuestas publicadas hasta ahora son incorrectas. Si bien es posible llegar a una situación hipotética en la que al presionar Alt + F4 se corrompería un guardado en curso, al hacerlo requeriría Los desarrolladores se desviven deliberadamente para arruinar el sistema de guardado.

Desde una perspectiva de codificación, el usuario que presiona Alt + F4 no "cierra la ventana activa", ni "interrumpe el programa". Lo que hace es hacer que Windows coloque un mensaje WM_CLOSE en la cola de eventos del programa. Eso es todo.

La cola de eventos, como su nombre lo indica, es una cola de eventos que el programa debe procesar; esto consiste principalmente en la entrada del usuario. En el corazón del código de prácticamente todos los programas controlados por entrada externa, incluidos los juegos, se encuentra un evento loop , que verifica la entrada en la cola de eventos, la procesa y luego repite los dos últimos pasos en un bucle para siempre hasta que es hora de apagar.

Hay dos cosas a tener en cuenta aquí. La primera es que el bucle de eventos es una cosa lineal: no procesa el evento # 2 hasta que haya terminado de procesar el evento # 1

Y el segundo es que un mensaje WM_CLOSE no "sale del programa". Es un tipo especial de entrada, nada más. Le dice al programa que el usuario ha solicitado que el programa cierre la ventana actual. El programa es libre de responder a esto de cualquier forma que indique su código, incluido ignorarlo por completo. (Esto es algo muy grosero, pero los desarrolladores lo hacen ocasionalmente). Una de las respuestas más comunes es preguntar al usuario "¿Desea guardar antes de salir?" y/o proporcionar una Manera de cancelar la solicitud de cierre.

So what happens if the user presses Alt+F4 while the game is in the middle of saving? Keep in mind the first point: processing is linear. Assuming that the save is taking place in the main thread—which I'll cover a bit further on—the code can't even check the event queue to see that it's been sent a WM_CLOSE message until after saving is complete. Therefore there's nothing to interrupt.

Siempre es posible tener un programa de computadora que haga dos cosas a la vez. Esto se conoce como multithreading y ejecuta dos o más "hilos" lineales de ejecución de código al mismo tiempo. Entonces, alguien podría preguntar: "¿qué pasa si se está guardando en un hilo diferente mientras aparece el mensaje WM_CLOSE y se procesa?" La respuesta a esa pregunta es que cualquier desarrollador que haga esto, es probable que su código corrompa los archivos guardados a la izquierda, a la derecha y al centro, incluso sin que el usuario solicite una renuncia en un momento inoportuno. Esto se debe a que guardar significa escribir en el disco una copia del estado del juego en este momento. Si haces esto sin interrumpir el juego, es posible que algo cambie cuando comienzas a guardar y cuando terminas, y luego el archivo de guardar termina con algunos datos que se refieren al estado antiguo del juego y otros que se refieren al nuevo estado, que no tiene ningún sentido juntos, y ahora tiene un archivo de guardar dañado.

Esta es realmente una de las primeras cosas que alguien aprende acerca de los subprocesos múltiples: nunca permita que dos hilos toquen los mismos datos al mismo tiempo si uno (o ambos) de ellos lo cambiarán. Fallo seguir este principio crea condiciones de carrera donde los datos se corrompen y las cosas fallan de manera extraña. Cualquier desarrollador competente va a hacer todo lo posible para evitar escenarios en los que aparezca una condición de carrera. Por lo tanto, ¡un desarrollador que compruebe el código que realiza una operación de guardar en un subproceso separado será muy probablemente visto por el resto del equipo de desarrolladores con horror!

TL;DR: If your game already performs autosaves without corrupting itself, it's safe to assume that there is no risk of corruption in politely asking the game to shut down, (which is what Alt+F4 does,) even if you do so in the middle of a save. When warning screens tell you not to shut down the game while saving, it refers to turning off the power or other more drastic ways of terminating gameplay.

107
agregado
Los comentarios no son para discusión extendida; esta conversación ha sido movido a chatear .
agregado el autor tomaytotomato, fuente
Detente aquí. La nueva discusión entra en chat .
agregado el autor tomaytotomato, fuente
Esta respuesta tiene una publicación meta . Por favor contribuya con sus pensamientos.
agregado el autor Frank, fuente

Cualquier cosa que interrumpa el programa mientras se está escribiendo puede dañar el archivo guardado. Si quieres evitar corromper las partidas guardadas, usa la secuencia incorporada del juego para salir del programa.

28
agregado
Detener la discusión aquí. Si tiene algo que discutir, hágalo en chat .
agregado el autor ADB, fuente

ALT + F4 generalmente está bien para cerrar un juego. El problema principal es que al hacerlo le dirás al juego que te gustaría que se cierre y depende de cómo el programador decidió manejar cuando un usuario presiona ALT + F4 cuando el juego no se ha guardado.

Esto no es realmente un problema para el juego que te guardas haciendo una pausa y seleccionando "guardar" en el menú. Pero algunos juegos tienen "guardado automático". Ellos automáticamente guardarán tu juego mientras juegas. Si presiona ALT-F4 durante uno de esos procesos de guardado, es muy posible que corrompa los datos guardados si el juego está mal programado.

Si agrega, pídale que salga del juego mientras lo está guardando, técnicamente debe terminar de guardarlo antes de continuar con su comando para salir pero hay (no es frecuente pero ocurre) veces cuando un juego ha sido tan mal programado que podría usar multihilo para guardar mientras se procesa también su comando de salir.

Por lo general, los juegos que tienen "guardado automático" tendrán un ícono que aparecerá en la esquina de la pantalla en algún lugar para que sepa que está guardando. La mayoría de las pantallas de carga le dirán "No apague ni salga del juego cuando vea este icono".

Here's a couple example of games telling you about their autosave icons: Autosave Loading Screen 1

Autosave Loading Screen 2

TL; DR: generalmente está bien usar ALT + F4 para cerrar un juego. Hay algunos momentos poco probables pero posibles que podrían corromper los datos guardados, pero probablemente no lo harán. Si quieres estar seguro, usa el menú del juego para salir del juego.

17
agregado
Detener la discusión aquí. Si tiene algo que discutir, hágalo en chat .
agregado el autor ADB, fuente

Si la aplicación se bloquea cuando se cierra (lo cual es un problema conocido en Undertale , Cities : Skylines , Dragon Age: Origins , y muchos otros juegos), entonces no deberías dejarlo en el medio de guardar. La respuesta de @MasonWheeler asume que el juego no se bloquea. El bloqueo anula todo, finaliza todos los subprocesos y es generalmente una forma muy abrupta de salir de un programa.

Si bien es posible que todas las escrituras ya se hayan entregado al kernel (y se completarán automáticamente), también es posible que el juego realice múltiples escrituras (por ejemplo, Minecraft en realidad usa múltiples archivos de guardado y debe usar una técnica de escritura múltiple), en cuyo caso se produce una interrupción en el el tiempo equivocado puede dejar solo algunas de esas escrituras completas. Además, Linux (y posiblemente Mac OS X, no he investigado) no tiene escrituras asíncronas reales (el aio_ * funciones son en realidad solo escrituras síncronas que se ejecutan en la parte superior de un grupo de subprocesos del espacio del usuario), lo que significa que no es realmente posible Kernel "en primer lugar en esa plataforma.

Como no puedes saber que tu juego no tiene un error de bloqueo , no debes presionar Alt + F4 a menos que quieras vivir peligrosamente.

9
agregado
@Zaibis: hay poca o ninguna ventaja al usar Alt + F4. ¿Por qué tomar riesgos innecesarios?
agregado el autor Kevin, fuente
Para el registro, no se trata de código abierto frente a código cerrado. Cualquier software puede tener errores. Usted tiene que juzgar los beneficios y riesgos en una base de caso por caso. Juzgo que Alt + F4 no vale la pena. Eso es todo lo que mi respuesta está diciendo.
agregado el autor Kevin, fuente
@Zaibis: Tengo dos párrafos completos del primero y una oración del último (que, por cierto, alguien editó de una manera que ya he revertido parcialmente - ver el historial de edición para más detalles).
agregado el autor Kevin, fuente
¿Problema conocido en Undertale? El ahorro es casi instantáneo en Undertale, e incluso así, el juego no te permitirá salir mientras se está ahorrando.
agregado el autor Hugo Zink, fuente
Punto justo, pero estoy en desacuerdo con su conclusión. Su conclusión es aplicable a todo, por lo que esto llevaría a: No utilice ninguna función de software de código cerrado, ya que no puede saber que no tiene ningún error. Y eso es ridículo!
agregado el autor user8476, fuente
No estoy discutiendo sobre las ventajas del atajo alt f4. Incluso estoy contigo aquí. Pero la base de argumentos sobre esto es algo que realmente no veo de esta manera.
agregado el autor user8476, fuente
Ok, pero debes recordar que hay una diferencia entre explicar algo como es y explicar algo como lo experimentas. Su respuesta me suena como la segunda, mientras que debería ser la primera (ya que no podemos juzgar aquí). Nada más es lo que trato de aclarar.
agregado el autor user8476, fuente
Lo siento, leí tu respuesta en el momento equivocado y te hice daño.
agregado el autor user8476, fuente

De acuerdo con Pautas de Microsoft para Inerface del usuario del teclado , Alt + F4 debería "Cerrar el elemento activo o salir de la aplicación activa".

En el nivel de la aplicación, eso debería distribuir un mensaje WM_QUIT . Para aplicaciones con "documentos" no guardados o sucios abiertos, esto nuevamente debe presentar al usuario un mensaje que le pregunta si desea guardar los cambios o no. Por lo tanto, si los programadores se preocuparon de cumplir con todas esas especificaciones, Alt + F4 debería preguntarle si desea guardar el estado del juego. Sin embargo, no todos se preocupan por las especificaciones, por lo que puede ser seguro en algunos juegos y no en algunos.

5
agregado
" que debería distribuir un mensaje WM_QUIT ", no, pone en cola un WM_CLOSE , que de forma predeterminada cerrará la ventana, pero no saldrá del programa. WM_CLOSE tiene que ser manejado por el programa para llamar a PostQuitMessage() , que, cuando se maneja adecuadamente, debe salir del bucle principal del programa.
agregado el autor Chris, fuente

Sin embargo, hay algo que me preocupa; Al salir de un juego usando alt + F4 en Windows, ¿podría causar que el archivo guardado del juego se corrompa, especialmente durante el guardado automático?

La respuesta corta

Depende del juego, y he encontrado que ALT + F4 es generalmente una forma segura de cerrar un juego. La corrupción nunca se pretende, por lo que se explica mejor por errores o un diseño de código deficiente.

La respuesta larga:

Según documentación oficial de Microsoft a>:

El usuario puede cerrar la ventana de una aplicación haciendo clic en el botón Cerrar o usando un atajo de teclado como ALT + F4. Cualquiera de estas acciones hace que la ventana reciba un mensaje WM_CLOSE. El mensaje WM_CLOSE le da la oportunidad de avisar al usuario antes de cerrar la ventana.

Por lo tanto, el uso de ALT + F4 está sujeto a cómo el juego ha sido programado para manejar los mensajes de WM_CLOSE . Sin embargo, hay otros factores a tener en cuenta:

  • ¿Qué otros procesos se están ejecutando (por ejemplo, guardar automáticamente)
  • Calidad del código (es decir, potencial de errores)

Por experiencia personal, nunca he visto corrupción en el juego cuando uso ALT + F4 a mitad del juego. El único efecto que he notado es que vuelves a tu último punto de control/archivo guardado (depende del juego). De hecho, uso ALT + F4 a menudo, prefiriendo hacer clic durante 2 minutos intentando salir de un juego a través de los menús.

Debes encontrar que cualquier juego que ofrezca una función de guardar hará una copia del mundo del juego en un punto específico. Siempre que tenga la capacidad de cargar el guardado (normalmente a través de la opción Cargar en el menú, pero también puede aplicar para ubicarlo automáticamente en su último punto de control guardado en algunos juegos), entonces debe confiar que ALT + F4 a mitad del juego es seguro. De hecho, encontrará juegos que ofrecen ahorrar al usar ALT + F4.

Sin embargo, ALT + F4 durante el proceso de guardado puede conllevar un riesgo. El código necesitaría manejar este escenario específicamente. Se trata básicamente de permitir que la funcionalidad de guardado automático termine de ejecutarse una vez que se reciba el mensaje WM_CLOSE

Digo básicamente, pero puede ser complicado conseguir el código correcto. Más aún si consideras que el juego probablemente está usando hilos. Los hilos críticos para el guardado del juego deben permitirse completar antes de cerrar la aplicación. Las diferentes versiones de Windows también tienen diferencias sutiles en la forma en que implementan los subprocesos (al igual que la biblioteca que utiliza, incluso la biblioteca estándar de C ++ cambia entre versiones).

Cuando se trata de enhebrar, muchas cosas pueden salir mal. Código de buggy y mal diseño son dos factores. También es posible que ocurran cosas ligeramente diferentes dependiendo de cuándo (durante el proceso) presiona ALT + F4. Puede obtener un comportamiento diferente si lo presiona antes de escribir CUALQUIER archivo de guardar.

Una gran cantidad de juegos que ofrecen el guardado automático tienen un mensaje de advertencia que le indica que no apague la máquina durante el guardado automático. Nunca consideraría que ALT + F4 es una buena idea a mitad de guardado. Puede ser seguro, pero no hay garantía. Técnicamente, los mensajes de advertencia hablan de escenarios en los que un archivo de guardado puede estar parcialmente escrito porque se perdió el poder durante el proceso, pero me gusta ser cauteloso. Perder horas que pones en un juego es muy frustrante. ¿Por qué arriesgarlo?

Otro punto a considerar es el destino de guardar "archivos". Cada vez más juegos se están alejando de los archivos locales hacia los servicios basados ​​en la nube y otros servicios web. ALT + F4 durante dicho proceso de guardado podría escribir parcialmente los datos (y, por lo tanto, crear un daño).

2
agregado