Можно использовать ALT + F4 для закрытия игры. Сохранить данные?

Я довольно новичок в компьютерных играх после PS3. Я не переключился на PS4, а перешел на компьютерные игры. Пока все круто.

Однако есть вещь, которая беспокоит меня; во время выхода из игры с использованием alt < / kbd > + F4 < / kbd > в Windows это может привести к повреждению файла сохраненной игры, особенно во время автосохранения?

< час / >

Предупреждение. Эти ответы носят общий характер и могут не относиться к вашей конкретной игре, и при некоторых необычных обстоятельствах попадание в Alt-F4 может в любом случае повредить ваш файл сохранения. (Пример: игра запускается в Dosbox, или эмуляторе, или терминале, или вы нажимаете Alt-F4 на окне, которое висит, а затем подтверждаете, что хотите убить процесс.)

Использование ALT-F4 для выхода из игры на свой страх и риск.

Комментарии к вопросу (1)
Решение

Как программист, оба опубликованных ответа неверны. Хотя можно придумать гипотетическую ситуацию, в которой нажатие Alt < / kbd > + F4 < / kbd > повредит процесс сохранения, фактически делая это потребует от разработчиков совершенно сознательно идти своим путем, чтобы испортить систему сохранения.

С точки зрения кодирования пользователь нажимает Alt < / kbd > + F4 < / kbd > не «закрывает активное окно» и не «прерывает программу».«Это заставляет Windows размещать сообщение« WM_CLOSE »в очереди событий программы. Это все.

Очередь событий, как указывает имя, представляет собой очередь событий для обработки программы; это в основном состоит из ввода от пользователя. В основе кода практически для каждой программы, основанной на внешнем вводе, в том числе игры, это то, что 's известен как event loop , который проверяет ввод в очередь событий, обрабатывает это, затем повторяет последние два шага в цикле навсегда, пока это не 'время выключиться.

Здесь есть две вещи, которые нужно иметь в виду. Во-первых, цикл событий является линейным: вы не обрабатываете событие # 2, пока не закончите обработку события # 1.

И второе, что сообщение WM_CLOSE не «выходит из программы». Это особый тип ввода, не более того. Он сообщает программе, что пользователь попросил программу закрыть текущее окно. Программа может ответить на это любым способом, который говорит ее код, включая полное игнорирование. (Это очень грубая вещь, но разработчики иногда делают это.) Один из наиболее распространенных ответов - спросить пользователя «Хотите ли вы сохранить перед выходом?"* и / или предоставить способ отменить запрос на закрытие.

Так что же произойдет, если пользователь нажмет Alt < / kbd > + F4 < / kbd > в то время как игра находится в середине сохранения? Имейте в виду первый пункт: обработка линейна. Предполагая, что сохранение происходит в основной ветке & mdash, которую я расскажу немного дальше на & mdash; код не может даже проверить очередь событий, чтобы увидеть, что ему отправлено сообщение WM_CLOSE до тех пор, пока сохранение завершено. Поэтому нечего прерывать.

Всегда можно иметь компьютерную программу, делающую две вещи одновременно. Это известно как multithreading , запускающее два или более линейных «потока» выполнения кода одновременно. Поэтому кто-то может спросить: «Что, если он сохраняет в другой ветке, когда приходит сообщение« WM_CLOSE »и обрабатывается?«Ответ на этот вопрос заключается в том, что любые разработчики, которые делают это, их код, вероятно, будут повреждать файлы сохранения влево, вправо и по центру даже без того, чтобы пользователь запрашивал выход в неподходящий момент. Это связано с тем, что сохранение означает запись на диск копии состояния игры на данный момент. Если вы делаете это, не прерывая игру, это 'Возможно, что-то может измениться между тем, когда вы начнете экономить, и когда вы закончите, и затем файл сохранения заканчивается некоторыми данными, которые относятся к старому состоянию игры, и некоторыми, которые относятся к новому состоянию, который дон 'не имеет никакого смысла вместе, и теперь у вас есть поврежденный файл сохранения.

На самом деле это одна из первых вещей, которые кто-либо узнает о многопоточности: никогда не позволяйте двум потокам касаться одних и тех же данных одновременно, если один (или оба) из них будут их изменять. Несоблюдение этого принципа создает расовые условия, когда данные повреждены и что-то не получается странным образом. Любой компетентный разработчик собирается изо всех сил избегать сценариев, в которых может появиться состояние гонки. Таким образом, остальная часть команды разработчиков с ужасом воспримет одного разработчика, проверяющего код, который выполняет сохранение в отдельном потоке!

TL; DR: Если ваша игра уже выполняет автосохранение, не повреждая себя, можно с уверенностью предположить, что нет риска повреждения при вежливом запросе игры выключиться (именно это / kbd > + F4 < / kbd >), даже если вы делаете. Когда экраны предупреждений говорят вам не закрывать игру во время сохранения, это означает «отключение питания» или другие более радикальные способы прекращения игрового процесса.

Комментарии (3)

Все, что прерывает программу во время ее записи, может повредить файл сохранения. Если вы хотите избежать повреждения сохранения, используйте встроенную последовательность игры, чтобы выйти из программы.

Комментарии (1)

ALT + F4 обычно можно закрыть игру. Основная проблема заключается в том, что это скажет игре, что вы хотите, чтобы она закрылась, и это зависит от того, как программист решил справиться, когда пользователь нажимает ALT + F4, когда игра не была сохранена.

Это не проблема для игры, которую вы сохраняете, останавливаясь и выбирая «сохранить» в меню. Но в некоторых играх есть «автосохранение». Они автоматически сохранят вашу игру, как вы играете. Если вы ALT-F4 во время одного из этих процессов сохранения, вы вполне можете повредить данные сохранения, если игра была запрограммирована плохо.

Если вы добавите, попросите его выйти из игры, пока она сохраняет ее, технически следует закончить сохранение, прежде чем выполнять команду «выходить, но есть» (не часто, но это случается) времена, когда игра запрограммирована настолько плохо, что она может использовать многопоточность для сохранения при обработке вашей команды quit.

Обычно игры с «автосохранением» будут иметь значок, который появляется в углу экрана где-то, чтобы вы знали, что это экономия. Большинство загрузочных экранов скажут вам: «Не выключайте и не выходите из игры, когда видите этот значок».

Вот пара примеров игр, рассказывающих о своих значках автосохранения:

TL; DR: Обычно можно использовать ALT + F4 для закрытия игры. Есть некоторые маловероятные, но возможные времена, когда это может повредить сохраненные данные, но, вероятно, не будет. Если вы хотите быть в безопасности, используйте внутриигровое меню, чтобы выйти из игры.

Комментарии (1)

Если приложение crashes , когда оно выходит (что является известным вопросом в Undertale , [ Города: Skylines ](https:// steamcommunity.com. Ответ @MasonWheeler предполагает, что игра не рухнет. Сокрушение прерывает все, завершает все темы и, как правило, является очень резким способом выхода из программы.

Хотя возможно, что все записи уже были переданы ядру (и будут завершены автоматически), также возможно, что игра выполняет несколько записей (например,. Minecraft фактически использует несколько файлов сохранения и должен использовать технику многократной записи), и в этом случае прерывание в неподходящее время может оставить только некоторые из эти записи завершены. Кроме того, Linux (и, возможно, Mac OS X, Я не исследовал) не имеет настоящих асинхронных писем ( [aio_ *функции]http://man7.org/linux/man-pages/man7/aio.7.html) на самом деле просто синхронная запись, работающая поверх пула потоков в пользовательском пространстве) это означает, что это 'действительно возможно &"рука списывается с ядра &" в первую очередь на этой платформе.

Поскольку вы не можете знать, что в вашей игре нет ошибки , вы не должны вообще Alt + F4, если не хотите жить опасно.

Комментарии (8)

В соответствии с Руководством Microsoft для пользователя клавиатуры Inerface, Alt + F4 должен "Закрыть активный элемент или выйти из активного приложение.«

На уровне приложения это должно отправлять сообщение WM_QUIT. Для приложений с открытыми неспасенными или грязными «документами» это снова должно предоставить пользователю сообщение с вопросом, сохранять ли изменения или нет. Следовательно, если программисты позаботились о том, чтобы соблюдать все эти спецификации, Alt + F4 должен * спросить вас, хотите ли вы сохранить состояние игры. Однако не все заботятся о спецификациях, поэтому в некоторых играх это может быть безопасно, а в некоторых - небезопасно.

Комментарии (1)

Однако есть кое-что, что беспокоит меня; Выходя из игры с использованием alt + F4 в Windows, это может привести к повреждению файла сохраненной игры, особенно во время автосохранения?

Короткий ответ

Это зависит от игры, и я обнаружил, что ALT + F4, как правило, является безопасным способом закрытия игры. Повреждение никогда не предназначено, поэтому лучше объясняется ошибками или плохим дизайном кода.

Длинный ответ:

Согласно [официальной документации Microsoft][1]:

Пользователь может закрыть окно приложения, нажав кнопку «Закрыть» или используя сочетание клавиш, например ALT + F4. Любое из этих действий заставляет окно получать сообщение WM_CLOSE. Сообщение WM_CLOSE дает вам возможность запросить пользователя перед закрытием окна.

Поэтому использование ALT + F4 зависит от того, как игра была запрограммирована для обработки сообщений WM_CLOSE. Тем не менее, есть и другие факторы, о которых следует знать:

  • Какие еще процессы выполняются (например,. автосохранение)
  • качество кода (т.е. потенциал для ошибок)

Исходя из личного опыта, я никогда не видел искажения игры при использовании середины игры ALT + F4. Единственное, что я заметил, это то, что вы возвращаетесь к своему последнему сохраненному файлу контрольной точки / сохранения (зависит от игры). Я на самом деле часто использую ALT + F4, предпочитая его нажимать в течение 2 минут, пытаясь выйти из игры через меню.

Вы должны обнаружить, что любая игра, которая предлагает функцию сохранения, сделает копию игрового мира в определенный момент. Пока есть возможность загрузить сохранение (обычно с помощью опции «Загрузить» в меню, но также может применяться для автоматического размещения вас на последнем сохраненном контрольном пункте в некоторых играх), вы должны быть уверены, что ALT + F4 mid Игра безопасна. На самом деле, вы найдете игры, которые предлагают сохранить при использовании ALT + F4.

Однако ALT + F4 во время процесса сохранения может нести риск. Код должен обрабатывать этот сценарий конкретно. Это в основном позволяет функции автоматического сохранения завершить работу после получения сообщения WM_CLOSE.

Я говорю в основном, но может быть сложно правильно понять код. Тем более, если учесть, что в игре, вероятно, используются темы. Потоки, критически важные для сохранения игры, должны быть разрешены до закрытия приложения. Различные версии Windows также имеют незначительные различия в том, как они реализуют потоки (как и библиотека, которую вы используете, даже стандартная библиотека C ++ изменяется между версиями).

Когда дело доходит до нарезания резьбы, многие вещи могут пойти не так. Багги-код и плохой дизайн - два фактора. Также возможно, что могут происходить немного разные вещи в зависимости от того, когда (во время процесса) вы нажимаете ALT + F4. Вы можете получить другое поведение, если нажмете его до того, как будет написан ЛЮБОЙ файл сохранения.

Многие игры, предлагающие автоматическое сохранение, имеют предупреждающее сообщение о том, что вы не должны выключать машину во время автоматического сохранения. Я бы никогда не подумал, что ALT + F4 - хорошая идея в середине сохранения. Это может быть безопасно, но нет никаких гарантий. Технически, предупреждающие сообщения говорят о сценариях, в которых файл сохранения может быть частично написан, потому что мощность была потеряна в середине процесса, но мне нравится быть осторожным. Потеря часов, которые вы вкладываете в игру, очень расстраивает. Зачем рисковать?

Еще один момент, который следует учитывать, - это место сохранения «файлов». Все больше и больше игр теперь переходят от локальных файлов к облачным сервисам и другим веб-сервисам. ALT + F4 во время такого процесса сохранения может потенциально частично записать данные (и, следовательно, создать повреждение).

[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/ff381396(v = vs.85).aspx

Комментарии (0)