Domanda:
È possibile che l'uso di ALT + F4 per chiudere un gioco abbia danneggiato i dati di salvataggio?
Haider
2016-01-14 23:23:00 UTC
view on stackexchange narkive permalink

Sono abbastanza nuovo nei giochi per PC dopo aver avuto una PS3.Non sono passato a PS4 ma sono andato invece ai giochi per PC.Finora è tutto fantastico.

Tuttavia c'è una cosa che mi preoccupa;mentre si esce da un gioco utilizzando alt + F4 in Windows, ciò potrebbe causare il danneggiamento del file di salvataggio del gioco, specialmente durante il salvataggio automatico?


Attenzione. Queste risposte sono generali e potrebbero non essere applicabili al tuo gioco specifico e in alcune circostanze non comuni premere Alt-F4 potrebbe comunque danneggiare il tuo file di salvataggio.(Esempio: il gioco viene eseguito in Dosbox, o un emulatore, o un terminale, oppure premi Alt-F4 su una finestra bloccata e poi confermi di voler terminare il processo.)

Uso di ALT-F4 per uscire da un gioco è a tuo rischio.

Immagino che influenzi i dati di salvataggio solo se premi Alt + F4 mentre il gioco sta salvando il tuo file.Non riesco a immaginare perché altrimenti avrebbe l'effetto di salvare i dati altrimenti, semplicemente non ha senso.
Sei risposte:
Mason Wheeler
2016-01-15 02:02:53 UTC
view on stackexchange narkive permalink

In qualità di programmatore, entrambe le risposte pubblicate finora non sono corrette. Sebbene sia possibile trovare una situazione ipotetica in cui premendo Alt + F4 si corrompa un salvataggio in corso, farlo richiederebbe il sviluppatori a fare di tutto per rovinare il sistema di salvataggio.

Dal punto di vista del codice, l'utente che preme Alt + F4 non lo fa "chiude la finestra attiva", né "interrompe il programma". Ciò che fa è far sì che Windows inserisca un messaggio WM_CLOSE nella coda degli eventi del programma. Questo è tutto.

La coda degli eventi, come indica il nome, è una coda di eventi che il programma deve elaborare; questo consiste principalmente nell'input dell'utente. Al centro del codice per essenzialmente ogni programma guidato da input esterno, compresi i giochi, c'è ciò che è noto come un loop di eventi , che controlla l'input sulla coda degli eventi, lo elabora, quindi ripete gli ultimi due esegue un ciclo all'infinito finché non è il momento di spegnersi.

Ci sono due cose da tenere a mente qui. Il primo è che il ciclo di eventi è una cosa lineare: non elabori l'evento n. 2 fino a quando non hai finito di elaborare l'evento n. 1.

E il secondo è che un WM_CLOSE il messaggio non "chiude il programma". È un tipo speciale di input, niente di più. Indica al programma che l'utente ha richiesto che il programma chiuda la finestra corrente. Il programma è libero di rispondere a questo in qualsiasi modo il suo codice dice, ignorandolo completamente. (Questa è una cosa molto scortese da fare, ma gli sviluppatori lo fanno occasionalmente.) Una delle risposte più comuni è chiedere all'utente "Vuoi salvare prima di uscire?" e / o fornire un modo per annullare la richiesta di chiusura.

Quindi cosa succede se l'utente preme Alt + F4 mentre il gioco sta salvando? Tieni presente il primo punto: l'elaborazione è lineare. Supponendo che il salvataggio avvenga nel thread principale, di cui parlerò un po 'più avanti, il codice non può nemmeno controllare la coda degli eventi per vedere che è stato inviato un messaggio WM_CLOSE fino a dopo il salvataggio è completo. Quindi non c'è nulla da interrompere.

È sempre possibile che un programma per computer faccia due cose contemporaneamente. Questo è noto come multithreading , che esegue due o più "thread" lineari di esecuzione del codice contemporaneamente. Quindi qualcuno potrebbe chiedere, "cosa succede se sta salvando in un thread diverso mentre il messaggio WM_CLOSE arriva e viene elaborato?" La risposta a questa domanda è che tutti gli sviluppatori che fanno questo, il loro codice rischia di danneggiare i file di salvataggio a sinistra, a destra e al centro anche senza che l'utente ne richieda la chiusura in un momento inopportuno. Questo perché salvare significa scrivere su disco una copia dello stato del gioco al momento. Se lo fai senza interrompere il gioco, è possibile che qualcosa possa cambiare tra quando inizi a salvare e quando finisci, e quindi il file di salvataggio finisce con alcuni dati che si riferiscono al vecchio stato del gioco e alcuni che si riferiscono al nuovo stato, che non ha alcun senso insieme, e ora hai un file di salvataggio danneggiato.

Questa è in realtà una delle prime cose che qualcuno impara sul multi-threading: non lasciare mai che due thread tocchino gli stessi dati contemporaneamente se uno (o entrambi) sta per cambiarli. Il mancato rispetto di questo principio crea condizioni di competizione in cui i dati vengono danneggiati e le cose falliscono in modi bizzarri. Qualsiasi sviluppatore competente farà di tutto per evitare scenari in cui si verificherebbe una condizione di competizione. Quindi uno sviluppatore che effettua il check-in del codice che esegue un salvataggio su un thread separato verrebbe molto probabilmente guardato con orrore dal resto del team di sviluppo!

TL; DR: se il tuo il gioco esegue già il salvataggio automatico senza corrompersi, è lecito ritenere che non ci sia rischio di corruzione nel chiedere educatamente al gioco di chiudersi, (che è ciò che fa Alt + F4 ,) anche se lo fai durante un salvataggio. Quando le schermate di avviso ti dicono di non chiudere il gioco durante il salvataggio, si riferisce allo spegnimento o ad altri modi più drastici per terminare il gioco.

I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-riga-4).
** Interrompi ** la discussione qui.Una nuova discussione va in [chat] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-row-4).
Questa risposta ha [un Meta post] (http://meta.gaming.stackexchange.com/questions/11216/what-do-we-do-with-highly-upvoted-accepted-wrong-answers).Per favore contribuisci con i tuoi pensieri.
Ryan
2016-01-14 23:28:22 UTC
view on stackexchange narkive permalink

Tutto ciò che interrompe il programma durante la scrittura può danneggiare il file di salvataggio.Se vuoi evitare di danneggiare i salvataggi, usa la sequenza incorporata del gioco per uscire dal programma.

Interrompi la discussione qui.Se hai qualcosa di cui discutere, fallo in [chat] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-santi-fila-4).
jimmyplaysdrums
2016-01-15 00:16:06 UTC
view on stackexchange narkive permalink

ALT + F4 va generalmente bene per chiudere un gioco. Il problema principale è che così facendo dirai al gioco che vorresti che si chiudesse e dipende da come il programmatore ha deciso di gestire quando un utente preme ALT + F4 quando il gioco non è stato salvato.

Questo non è un vero problema per il gioco che salvi da solo mettendo in pausa e selezionando "salva" dal menu. Ma alcuni giochi hanno il "salvataggio automatico". Salveranno automaticamente il tuo gioco mentre giochi. Se premi ALT-F4 durante uno di questi processi di salvataggio potresti corrompere i tuoi dati di salvataggio se il gioco è stato programmato male.

Se aggiungi chiedigli di uscire dal gioco mentre sta salvando, tecnicamente dovrebbe terminare il salvataggio prima di eseguire il comando per uscire ma ci sono (non spesso ma succede) momenti in cui un gioco è stato programmato così male che potrebbe usare il multithreading per salvare mentre elabora anche il tuo comando quit.

Di solito i giochi che hanno "salvataggio automatico" avranno un'icona che appare in un angolo dello schermo da qualche parte per farti sapere che sta salvando. La maggior parte delle schermate di caricamento ti dirà "Non spegnere o uscire dal gioco quando vedi questa icona".

Ecco un paio di esempi di giochi che ti parlano delle loro icone di salvataggio automatico: Autosave Loading Screen 1

Autosave Loading Screen 2

TL; DR: In genere va bene usare ALT + F4 per chiudere una partita. Ci sono alcune volte improbabili ma possibili in cui potrebbe danneggiare i dati di salvataggio, ma probabilmente non lo farà. Se vuoi essere sicuro, usa il menu di gioco per uscire dal gioco.

Interrompi la discussione qui.Se hai qualcosa di cui discutere, fallo in [chat] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-santi-fila-4).
Kevin
2016-01-16 22:50:51 UTC
view on stackexchange narkive permalink

Se l'applicazione si arresta in modo anomalo quando viene chiusa (problema noto in Undertale , Cities: Skylines , Dragon Age: Origins e molti altri giochi), quindi non dovresti chiuderlo durante il salvataggio. La risposta di @ MasonWheeler presume che il gioco non si blocchi. L'arresto anomalo interrompe tutto, termina tutti i thread ed è generalmente un modo molto brusco per uscire da un programma.

Sebbene sia possibile che tutte le scritture siano già state trasferite al kernel (e saranno completate automaticamente) , è anche possibile che il gioco esegua più scritture (ad es. Minecraft effettivamente utilizza più file di salvataggio e deve utilizzare una tecnica di scrittura multipla), in tal caso un'interruzione nel momento sbagliato potrebbe lasciare completate solo alcune di quelle scritture. Inoltre, Linux (e forse Mac OS X, non ho indagato) non ha scritture asincrone reali (le funzioni aio_ * sono in realtà solo scritture sincrone eseguite su un pool di thread dello spazio utente), il che significa che non è realmente possibile "scrivere a mano nel kernel" in primo luogo su quella piattaforma.

Dato che non puoi sapere che il tuo gioco non ha un bug che si blocca , non dovresti affatto Alt + F4 a meno che non ti piaccia vivere pericolosamente.

punto giusto, ma non sono in disaccordo con la tua conclusione.La tua conclusione è applicabile a tutto, quindi questo porterebbe a: Non utilizzare alcuna funzionalità del software closed source poiché non puoi sapere che non ha bug.E questo è ridicolouless!
@Zaibis: C'è poco o nessun vantaggio nell'usare Alt + F4.Perché correre rischi inutili?
Non sto discutendo sui vantaggi della scorciatoia alt f4.Sono anche con te qui.ma gli argomenti di base a riguardo è qualcosa che davvero non vedo in questo modo.
Per la cronaca, non si tratta di open source vs closed source.Qualsiasi software può avere bug.Devi valutare i vantaggi e i rischi caso per caso.Ritengo che Alt + F4 non ne valga la pena.È tutto ciò che dice la mia risposta.
Ok, ma dovresti ricordare che c'è una differenza tra spiegare qualcosa così com'è e spiegare qualcosa nel modo in cui lo vivi.la tua risposta mi suona come la seconda mentre dovrebbe essere la prima (dato che non possiamo giudicare qui).Nient'altro è quello che cerco di chiarire.
@Zaibis: Ho * due interi paragrafi * del primo e * una frase * del secondo (che, a proposito, qualcuno ha modificato in un modo che da allora ho parzialmente ripristinato - vedi la cronologia delle modifiche per i dettagli).
Mi dispiace, ho letto la tua risposta nel momento sbagliato e ti ho fatto un torto.
Problema noto in Undertale?Il salvataggio è praticamente istantaneo in Undertale e, anche in questo caso, il gioco non ti consentirà di uscire durante il salvataggio.
Hagen von Eitzen
2016-01-15 02:26:21 UTC
view on stackexchange narkive permalink

Secondo le Linee guida di Microsoft per l'utente della tastiera Inerface, Alt + F4 dovrebbe "Chiudere l'elemento attivo o uscire dall'applicazione attiva".

A livello di applicazione, dovrebbe contenere un messaggio WM_QUIT .Per le applicazioni con "documenti" non salvati o sporchi aperti, questo dovrebbe presentare nuovamente all'utente un messaggio che chiede se salvare o meno le modifiche.Quindi, se i programmatori si sono preoccupati di attenersi a tutte quelle specifiche, Alt + F4 dovrebbe chiederti se vuoi salvare lo stato del gioco.Tuttavia, non tutti si preoccupano delle specifiche, quindi potrebbe essere sicuro su alcuni giochi e non su alcuni.

"_che dovrebbe spostare un messaggio WM_QUIT_", no, accoda un `WM_CLOSE`, che di default chiuderà la finestra, ma non uscirà dal programma.`WM_CLOSE` deve essere gestito dal programma per chiamare` PostQuitMessage () `, che, se gestito correttamente, dovrebbe uscire dal ciclo principale del programma.
user101016
2016-01-26 20:20:04 UTC
view on stackexchange narkive permalink

Tuttavia c'è una cosa che mi preoccupa; mentre si esce da un gioco utilizzando Alt + F4 in Windows, ciò potrebbe causare il danneggiamento del file di salvataggio del gioco, specialmente durante il salvataggio automatico?

La risposta breve

Dipende dal gioco e ho scoperto che ALT + F4 è generalmente un modo sicuro per chiudere un gioco. La corruzione non è mai intesa, quindi è meglio spiegata da bug o da una cattiva progettazione del codice.

La risposta lunga:

Secondo documentazione ufficiale di Microsoft:

L'utente può chiudere una finestra dell'applicazione facendo clic sul pulsante Chiudi o utilizzando una scorciatoia da tastiera come ALT + F4. Qualsiasi di queste azioni fa sì che la finestra riceva un messaggio WM_CLOSE. Il messaggio WM_CLOSE ti dà l'opportunità di chiedere all'utente prima di chiudere la finestra.

Pertanto, l'uso di ALT + F4 è soggetto a come il gioco è stato programmato per gestire WM_CLOSE codice> messaggi. Tuttavia, ci sono altri fattori di cui essere consapevoli:

  • Quali altri processi sono in esecuzione (es. Salvataggio automatico)
  • Qualità del codice (es. Possibilità di bug)

Per esperienza personale, non ho mai visto il danneggiamento del gioco usando ALT + F4 a metà partita. L'unico effetto che ho notato è che torni all'ultimo checkpoint / file di salvataggio salvato (dipende dal gioco). In realtà uso spesso ALT + F4, preferendo che faccia clic per 2 minuti cercando di uscire da un gioco tramite i menu.

Dovresti scoprire che qualsiasi gioco che offre una funzione di salvataggio creerà una copia del mondo di gioco in un punto specifico. Finché c'è la possibilità di caricare il salvataggio (normalmente tramite un'opzione Carica nel menu, ma può anche essere applicato per posizionarti automaticamente all'ultimo checkpoint salvato in alcuni giochi) allora dovresti essere sicuro che ALT + F4 a metà partita è sicuro. In effetti, trovi giochi che offrono il salvataggio quando usi ALT + F4.

Tuttavia, ALT + F4 durante il processo di salvataggio può comportare un rischio. Il codice dovrebbe gestire questo scenario in modo specifico. Fondamentalmente si tratta di consentire alla funzionalità di salvataggio automatico di terminare l'esecuzione una volta ricevuto un messaggio WM_CLOSE .

Dico fondamentalmente, ma può essere complicato ottenere il codice corretto. Ancora di più se si tiene conto del fatto che il gioco probabilmente utilizza i thread. I thread critici per il salvataggio del gioco devono essere completati prima di chiudere l'applicazione. Diverse versioni di Windows hanno anche sottili differenze nel modo in cui implementano i thread (così come la libreria che usi, anche la libreria standard C ++ cambia tra le versioni).

Quando si tratta di threading, tante cose possono andare storte . Il codice difettoso e il design scadente sono due fattori. È anche possibile che si verifichino cose leggermente diverse a seconda di quando (durante il processo) si preme ALT + F4. Potresti ottenere un comportamento diverso se lo premi prima che QUALSIASI file di salvataggio sia stato scritto.

Molti giochi che offrono il salvataggio automatico hanno un messaggio di avviso che ti dice di non spegnere la macchina durante un salvataggio automatico . Non considererei mai ALT + F4 una buona idea a metà salvataggio. Potrebbe essere sicuro, ma non ci sono garanzie. Tecnicamente, i messaggi di avviso parlano di scenari in cui un file di salvataggio può essere parzialmente scritto perché l'alimentazione è stata persa durante il processo, ma mi piace essere cauto. Perdere ore che metti in un gioco è molto frustrante. Perché rischiare?

Un altro punto da considerare è la destinazione dei "file" di salvataggio. Sempre più giochi si stanno spostando dai file locali ai servizi basati su cloud e ad altri servizi web. ALT + F4 durante un tale processo di salvataggio potrebbe potenzialmente scrivere parzialmente i dati (e quindi creare un danneggiamento).



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...