Pytanie:
Czy użycie ALT + F4 do zamknięcia gry jest uszkodzone Zapisać dane?
Haider
2016-01-14 23:23:00 UTC
view on stackexchange narkive permalink

Po zakupie PS3 jestem całkiem nowy w grach na PC.Nie przeszedłem na PS4, ale zamiast tego przeszedłem do gier na PC.Jak dotąd wszystko jest super.

Jest jednak coś, co mnie niepokoi;Czy podczas wychodzenia z gry za pomocą alt + F4 w systemie Windows może to spowodować uszkodzenie pliku zapisu gry, szczególnie podczas automatycznego zapisywania?


Ostrzeżenie. Te odpowiedzi są ogólne i mogą nie mieć zastosowania do twojej konkretnej gry, aw niektórych nietypowych okolicznościach naciśnięcie Alt-F4 i tak może uszkodzić twój plik zapisu.(Przykład: gra działa w Dosbox, emulatorze lub terminalu, lub naciskasz Alt-F4 na zawieszonym oknie, a następnie potwierdzasz, że chcesz zabić proces.)

Użycie ALT-F4, aby wyjść z gry, odbywa się na własne ryzyko.

Wyobrażam sobie, że wpływa to tylko na dane zapisu, jeśli naciśniesz Alt + F4 podczas zapisywania pliku przez grę.Nie mogę sobie wyobrazić, dlaczego inaczej miałoby to wpłynąć na zapisywanie danych, po prostu nie ma to sensu.
Sześć odpowiedzi:
Mason Wheeler
2016-01-15 02:02:53 UTC
view on stackexchange narkive permalink

Jako programista obie przesłane do tej pory odpowiedzi są niepoprawne. Chociaż można wymyślić hipotetyczną sytuację, w której naciśnięcie Alt + F4 spowodowałoby uszkodzenie trwającego zapisu, faktycznie zrobienie tego wymagałoby programiści, którzy dość celowo robią wszystko, co w ich mocy, aby schrzanić system zapisywania.

Z punktu widzenia kodowania, użytkownik naciskając Alt + F4 „zamyka aktywne okno” ani nie „przerywa programu”. Powoduje, że system Windows umieszcza komunikat WM_CLOSE w kolejce zdarzeń programu. To wszystko.

Kolejka zdarzeń, jak nazwa wskazuje, jest kolejką zdarzeń do przetworzenia przez program; składa się to głównie z danych wejściowych od użytkownika. Sercem kodu w zasadzie każdego programu sterowanego przez zewnętrzne dane wejściowe, w tym gier, jest tak zwana pętla zdarzeń , która sprawdza dane wejściowe w kolejce zdarzeń, przetwarza je, a następnie powtarza ostatnie dwa kroki w pętli na zawsze, aż nadejdzie czas wyłączenia.

Są dwie rzeczy, o których należy pamiętać. Po pierwsze, pętla zdarzeń jest rzeczą liniową: nie przetwarzasz zdarzenia nr 2, dopóki nie zakończysz przetwarzania zdarzenia nr 1.

A po drugie WM_CLOSE komunikat nie „zamyka programu”. To specjalny rodzaj danych wejściowych, nic więcej. Mówi programowi, że użytkownik zażądał, aby program zamknął bieżące okno. Program może odpowiedzieć na to w dowolny sposób, w jaki nakazuje jego kod, łącznie z całkowitym zignorowaniem. (Jest to bardzo niegrzeczne, ale programiści czasami to robią). Jedną z najczęstszych odpowiedzi jest pytanie użytkownika „Czy chcesz zapisać przed zakończeniem?” i / lub podać sposób na anulowanie żądania zamknięcia.

A co się stanie, jeśli użytkownik naciśnie Alt + F4 , gdy gra jest w trakcie zapisywania? Pamiętaj o pierwszym punkcie: przetwarzanie jest liniowe. Zakładając, że zapis odbywa się w głównym wątku - który omówię nieco dalej - kod nie może nawet sprawdzić kolejki zdarzeń, aby zobaczyć, że została wysłana wiadomość WM_CLOSE przed zapisywanie jest zakończone. Dlatego nie ma nic do przerwania.

Zawsze jest możliwe, aby program komputerowy robił dwie rzeczy naraz. Jest to znane jako wielowątkowość , czyli jednoczesne uruchamianie dwóch lub więcej liniowych „wątków” wykonywania kodu. Ktoś może więc zapytać, „a co, jeśli zapisuje się w innym wątku, gdy przychodzi wiadomość WM_CLOSE i jest przetwarzana?” Odpowiedź na to pytanie jest taka, że ​​każdy deweloper, który to zrobi, ich kod prawdopodobnie uszkodzi pliki Savefile w lewo, w prawo i do środka, nawet jeśli użytkownik nie poprosi o zakończenie pracy w nieodpowiednim momencie. Dzieje się tak, ponieważ zapisywanie oznacza wypisanie na dysku kopii aktualnego stanu gry. Jeśli zrobisz to bez przerywania gry, możliwe jest, że coś może się zmienić między rozpoczęciem zapisywania a zakończeniem, a następnie plik zapisu zawiera pewne dane, które odnoszą się do starego stanu gry, a inne odnoszą się do nowego stanu, które razem nie mają żadnego sensu, a teraz masz uszkodzony plik zapisu.

W rzeczywistości jest to jedna z pierwszych rzeczy, które ktoś dowiaduje się o wielowątkowości: nigdy nie pozwól dwóm wątkom dotykać tych samych danych w tym samym czasie, jeśli jeden (lub oba) z nich mają to zmienić. Nieprzestrzeganie tej zasady stwarza warunki wyścigu, w których dane ulegają uszkodzeniu, a rzeczy zawodzą w dziwaczny sposób. Każdy kompetentny programista zrobi wszystko, co w jego mocy, aby uniknąć scenariuszy, w których pojawią się warunki wyścigu. Tak więc jeden programista sprawdzający kod, który wykonuje zapis w osobnym wątku, najprawdopodobniej zostałby z przerażeniem przyjęty przez resztę zespołu programistów!

TL; DR: Jeśli twój gra już wykonuje automatyczne zapisy bez uszkadzania się, można bezpiecznie założyć, że nie ma ryzyka korupcji, jeśli uprzejmie poprosi grę o zamknięcie (co robi Alt + F4 ,), nawet jeśli robisz to w trakcie zapisywania. Kiedy ekrany ostrzegawcze mówią Ci, aby nie wyłączać gry podczas zapisywania, oznacza to wyłączenie zasilania lub inne bardziej drastyczne sposoby zakończenia rozgrywki.

Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-wiersz-4).
** Zatrzymaj ** dyskusję tutaj.Nowa dyskusja toczy się w [czacie] (http://chat.stackexchange.com/rooms/34387/discussion-on-answer-by-mason-wheeler-could-using-alt-f4-to-close-saints-row-4).
Ta odpowiedź zawiera [post Meta] (http://meta.gaming.stackexchange.com/questions/11216/what-do-we-do-with-highly-upvoted-accepted-wrong-answers).Podziel się swoimi przemyśleniami.
Ryan
2016-01-14 23:28:22 UTC
view on stackexchange narkive permalink

Wszystko, co przerywa program podczas zapisu, może uszkodzić plik zapisu.Jeśli chcesz uniknąć zepsucia zapisów, użyj sekwencji wbudowanej w grę, aby wyjść z programu.

Przerwij dyskusję tutaj.Jeśli masz coś do omówienia, zrób to na [czacie] (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 jest ogólnie w porządku, aby zamknąć grę. Głównym problemem jest to, że spowoduje to poinformowanie gry, że chcesz, aby została wyłączona i zależy to od tego, jak programista zdecydował się poradzić sobie, gdy użytkownik naciśnie klawisze ALT + F4, gdy gra nie została zapisana.

To nie jest tak naprawdę problem z grą, którą możesz uratować, zatrzymując się i wybierając „zapisz” z menu. Ale niektóre gry mają „automatyczne zapisywanie”. Będą automatycznie zapisywać twoją grę podczas gry. Jeśli użyjesz ALT-F4 podczas jednego z tych procesów zapisu, bardzo dobrze możesz uszkodzić dane zapisu, jeśli gra została źle zaprogramowana.

Jeśli dodasz polecenie, poproś o zakończenie gry podczas zapisywania, technicznie powinno zakończyć zapisywanie przed wykonaniem polecenia wyjścia, ale zdarzają się (niezbyt często, ale zdarza się) sytuacje, gdy gra została zaprogramowana tak bardzo, że może używać wielowątkowości do zapisywania, jednocześnie przetwarzając polecenie wyjścia.

Zwykle gry z funkcją „autozapisu” mają ikonę, która pojawia się w rogu ekranu w dowolnym miejscu, informując, że zapisuje. Na większości ekranów ładowania pojawi się komunikat „Nie wyłączaj ani nie wychodź z gry, gdy zobaczysz tę ikonę”.

Oto kilka przykładów gier, które informują o ikonach automatycznego zapisywania: Autosave Loading Screen 1

Autosave Loading Screen 2

TL; DR: Generalnie można używać ALT + F4 do zamykania gry. Istnieją mało prawdopodobne, ale możliwe sytuacje, w których może to spowodować uszkodzenie zapisanych danych, ale prawdopodobnie tak się nie stanie. Jeśli chcesz być bezpieczny, użyj menu w grze, aby zakończyć grę.

Przerwij dyskusję tutaj.Jeśli masz coś do omówienia, zrób to na [czacie] (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

Jeśli aplikacja ulega awarii podczas zamykania (co jest znanym problemem w Undertale , Cities: Skylines , Dragon Age: Origins i wiele innych gier), nie powinieneś rezygnować z tego w trakcie oszczędzania. Odpowiedź @ MasonWheeler zakłada, że ​​gra się nie zawiesza. Awaria przerywa wszystko, zamyka wszystkie wątki i generalnie jest bardzo nagłym sposobem na wyjście z programu.

Chociaż możliwe jest, że wszystkie zapisy zostały już przekazane do jądra (i zostaną automatycznie zakończone) , jest też możliwe, że gra wykonuje wiele zapisów (np. Minecraft faktycznie używa wielu plików zapisu i musi używać techniki wielokrotnego zapisu), w takim przypadku przerwanie w niewłaściwym czasie może spowodować, że tylko niektóre z tych zapisów zostaną zakończone. Ponadto Linux (i prawdopodobnie Mac OS X, którego nie badałem) nie ma rzeczywistych zapisów asynchronicznych (funkcje aio_ * są w rzeczywistości tylko synchronicznymi zapisami działającymi na pula wątków w przestrzeni użytkownika), co oznacza, że ​​w pierwszej kolejności na tej platformie nie jest możliwe „ręczne zapisywanie danych do jądra”.

Ponieważ nie możesz wiedzieć, że Twoja gra nie ma błąd powodujący awarię , w ogóle nie powinieneś używać Alt + F4, chyba że lubisz niebezpiecznie żyć.

słuszna uwaga, ale nie zgadzam się z twoim wnioskiem.Twój wniosek ma zastosowanie do wszystkiego, więc prowadziłoby to do: Nie używaj żadnej funkcji oprogramowania zamkniętego, ponieważ nie możesz wiedzieć, że nie ma żadnych błędów.I to jest niewiarygodne!
@Zaibis: Używanie Alt + F4 ma niewielką lub żadną korzyść.Po co podejmować niepotrzebne ryzyko?
Nie spieram się o zalety skrótu alt f4.Jestem tu nawet z tobą.ale podstawa argumentów na ten temat jest czymś, czego naprawdę nie widzę w ten sposób.
Dla przypomnienia, nie chodzi o open source kontra zamknięte źródło.Każde oprogramowanie może mieć błędy.Musisz ocenić korzyści i ryzyko indywidualnie dla każdego przypadku.Uważam, że Alt + F4 nie jest tego wart.To wszystko, co mówi moja odpowiedź.
Ok, ale pamiętaj, że istnieje różnica między wyjaśnianiem czegoś tak, jak to jest, a wyjaśnianiem czegoś tak, jak tego doświadczasz.twoja odpowiedź brzmi dla mnie jak druga, podczas gdy powinna być pierwsza (ponieważ nie możemy tutaj oceniać).Nic innego nie jest tym, co staram się wyjaśnić.
@Zaibis: Mam * dwa całe akapity * pierwszego i * jedno zdanie * drugiego (które, nawiasem mówiąc, ktoś zredagował w sposób, który od tego czasu częściowo wycofałem - zobacz historię edycji po szczegóły).
Przepraszam, przeczytałem twoją odpowiedź w złym momencie i skrzywdziłem cię.
Znany problem w Undertale?Zapisywanie jest prawie natychmiastowe w Undertale, a nawet wtedy gra nie pozwoli ci wyjść podczas zapisywania.
Hagen von Eitzen
2016-01-15 02:26:21 UTC
view on stackexchange narkive permalink

Zgodnie z Wytycznymi firmy Microsoft dotyczącymi interfejsu użytkownika klawiatury, Alt + F4 powinno „Zamknij aktywny element lub zamknij aktywną aplikację”.

Na poziomie aplikacji powinno to spowodować wyświetlenie komunikatu WM_QUIT .W przypadku aplikacji z otwartymi niezapisanymi lub brudnymi „dokumentami”, powinno to ponownie przedstawić użytkownikowi komunikat z pytaniem, czy zapisać zmiany, czy nie.Stąd jeśli programiści chcieli przestrzegać wszystkich tych specyfikacji, Alt + F4 powinien zapytać , czy chcesz zapisać stan gry.Jednak nie każdy dba o specyfikacje, więc w niektórych grach może być bezpieczny, a w niektórych nie.

„_to powinno wywołać komunikat WM_QUIT_”, nie, kolejkuje „WM_CLOSE”, który domyślnie zamknie okno, ale nie zamknie programu.Program musi obsłużyć `WM_CLOSE`, aby wywołać metodę` PostQuitMessage () `, która po prawidłowej obsłudze powinna zakończyć główną pętlę programu.
user101016
2016-01-26 20:20:04 UTC
view on stackexchange narkive permalink

Jednak jest coś, co mnie niepokoi; Czy podczas wychodzenia z gry przy użyciu alt + F4 w systemie Windows może to spowodować uszkodzenie pliku zapisu gry, szczególnie podczas automatycznego zapisywania?

Krótka odpowiedź

To zależy od gry i odkryłem, że ALT + F4 jest ogólnie bezpiecznym sposobem na zamknięcie gry. Korupcja nigdy nie jest zamierzona, więc lepiej można ją wytłumaczyć błędami lub złym projektem kodu.

Długa odpowiedź:

Zgodnie z oficjalną dokumentacją firmy Microsoft:

Użytkownik może zamknąć okno aplikacji, klikając przycisk Zamknij lub używając skrótu klawiaturowego, takiego jak ALT + F4. Każde z tych działań powoduje, że okno otrzymuje komunikat WM_CLOSE. Komunikat WM_CLOSE daje możliwość podpowiedzi użytkownika przed zamknięciem okna.

Dlatego użycie ALT + F4 zależy od tego, jak gra została zaprogramowana do obsługi WM_CLOSE kod> wiadomości. Istnieją jednak inne czynniki, o których należy pamiętać:

  • Jakie inne procesy są uruchomione (np. Automatyczne zapisywanie)
  • Jakość kodu (tj. Potencjalne błędy)

Z własnego doświadczenia nigdy nie widziałem uszkodzenia gry podczas używania klawiszy ALT + F4 w trakcie gry. Jedyne, co zauważyłem, to powrót do ostatniego zapisanego punktu kontrolnego / pliku zapisu (w zależności od gry). Właściwie często używam ALT + F4, wolę klikać przez 2 minuty, próbując wyjść z gry za pomocą menu.

Powinieneś zauważyć, że każda gra, która oferuje funkcję zapisywania, utworzy kopię świata gry w określonym momencie. Tak długo, jak istnieje możliwość wczytania zapisanego stanu gry (zwykle za pomocą opcji Load w menu, ale może również dotyczyć automatycznego umieszczania cię na ostatnim zapisanym punkcie kontrolnym w niektórych grach), powinieneś być pewien że ALT + F4 w środkowej fazie gry jest bezpieczne. W rzeczywistości znajdziesz gry, w których można zaoszczędzić, używając ALT + F4.

Jednak ALT + F4 podczas procesu zapisywania może wiązać się z ryzykiem. Kod musiałby obsługiwać ten scenariusz w szczególności. Zasadniczo jest to przypadek, w którym funkcja automatycznego zapisywania kończy działanie po odebraniu wiadomości WM_CLOSE .

Mówię w zasadzie, ale może być trudne uzyskanie prawidłowego kodu. Tym bardziej, jeśli weźmiesz pod uwagę, że gra prawdopodobnie używa wątków. Wątki krytyczne dla zapisania gry muszą zostać zakończone przed zamknięciem aplikacji. Różne wersje systemu Windows mają również subtelne różnice w sposobie implementowania wątków (podobnie jak używana biblioteka, a nawet zmiany w bibliotece standardowej C ++ między wersjami).

Jeśli chodzi o wątkowanie, wiele rzeczy może pójść nie tak . Błędny kod i zły projekt to dwa czynniki. Możliwe jest również, że mogą wystąpić nieco inne rzeczy w zależności od tego, kiedy (w trakcie procesu) naciśniesz ALT + F4. Możesz uzyskać inne zachowanie, jeśli naciśniesz go przed zapisaniem JAKIEKOLWIEK pliku zapisu.

Wiele gier, które oferują automatyczne zapisywanie, ma komunikat ostrzegawczy informujący o tym, aby nie wyłączać urządzenia podczas automatycznego zapisywania . Nigdy nie uważałbym, że ALT + F4 to dobry pomysł w trakcie zapisywania. Może to być bezpieczne, ale nie ma gwarancji. Z technicznego punktu widzenia komunikaty ostrzegawcze mówią o scenariuszach, w których plik składowania może zostać częściowo zapisany, ponieważ w trakcie procesu utracono zasilanie, ale lubię być ostrożny. Utrata godzin spędzonych w grze jest bardzo frustrująca. Po co ryzykować?

Inną kwestią do rozważenia jest miejsce docelowe zapisywania „plików”. Coraz więcej gier odchodzi teraz od plików lokalnych na rzecz usług opartych na chmurze i innych usług internetowych. ALT + F4 podczas takiego procesu zapisywania może potencjalnie częściowo zapisać dane (a tym samym spowodować uszkodzenie).



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...