Что такое delay status
Task. Delay Метод
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает задачу, которая будет выполнена после некоторой временной задержки.
Перегрузки
Создает отменяемую задачу, которая завершается через заданное количество миллисекунд.
Создает отменяемую задачу, которая завершается через заданное время.
Создает задачу, которая завершается через заданное количество миллисекунд.
Создает задачу, которая завершается через заданное время.
Delay(Int32, CancellationToken)
Создает отменяемую задачу, которая завершается через заданное количество миллисекунд.
Параметры
Токен отмены, который нужно контролировать во время ожидания выполнения задачи.
Возвращаемое значение
Задача, представляющая временную задержку.
Исключения
Аргумент millisecondsDelay меньше –1.
Задача была отменена.
Предоставленный объект cancellationToken уже удален.
Примеры
Комментарии
Значение, если маркер отмены сообщается до заданной задержки, TaskCanceledException результата исключения и задача завершается в Canceled состоянии. В противном случае задача будет завершена в RanToCompletion состоянии после истечения заданной задержки.
Сценарии использования и дополнительные примеры см. в документации по Delay(Int32) перегрузке.
Применяется к
Delay(TimeSpan, CancellationToken)
Создает отменяемую задачу, которая завершается через заданное время.
Параметры
Время, в течение которого ожидается завершение возвращаемой задачи, или TimeSpan.FromMilliseconds(-1) для неограниченного времени ожидания.
Токен отмены, который нужно контролировать во время ожидания выполнения задачи.
Возвращаемое значение
Задача, представляющая временную задержку.
Исключения
-или- Свойство TotalMilliseconds аргумента delay больше, чем MaxValue.
Задача была отменена.
Предоставленный объект cancellationToken уже удален.
Примеры
Обратите внимание, что этот пример включает потенциальное условие состязания: это зависит от задачи, которая асинхронно выполняет задержку при отмене маркера. Хотя задержка 1,5 секунд из вызова Delay(TimeSpan, CancellationToken) метода делает это допущением, тем не менее возможно, что вызов Delay(TimeSpan, CancellationToken) метода может быть возвращен до отмены маркера. В этом случае в примере выводится следующий результат:
Комментарии
Значение, если маркер отмены сообщается до заданной задержки, TaskCanceledException результата исключения и задача завершается в Canceled состоянии. В противном случае задача будет завершена в RanToCompletion состоянии после истечения заданной задержки.
Сценарии использования и дополнительные примеры см. в документации по Delay(Int32) перегрузке.
Чем опасен postDelayed
Часто из-за особенностей работы android системы и sdk, нам необходимо подождать, когда определённая часть системы будет сконфигурирована или произойдёт какое-то необходимое нам событие. Зачастую это является костылём, но иногда без них никак, особенно в условиях дедлайнов. Поэтому во многих проектах для этого использовался postDelayed. Под катом рассмотрим, чем же он так опасен и что с этим делать.
Проблема
Для начала рассмотрим как обычно используют postDelayed():
С виду всё хорошо, но давайте изучим этот код повнимательнее:
1) Это отложенное действие, выполнение которого мы будем ожидать через некоторое время. Зная насколько динамично пользователь может совершать переходы между экранами, данное действие должно быть отменено при смене фрагмента. Однако, этого здесь не происходит, и наше действие выполнится, даже если текущий фрагмент будет уничтожен.
Проверить это просто. Создаём два фрагмента, при переходе на второй запускаем postDelayed с большим временем, к примеру 5000 мс. Сразу возвращаемся назад. И через некоторое время видим в логах, что действие не отменено.
2) Второе «вытекает» из первого. Если в данном runnable мы передадим ссылку на property нашего фрагмента, будет происходить утечка памяти, поскольку ссылка на runnable будет жить дольше, чем сам фрагмент.
Что же делать?
Необходимо отписываться от нашего действия перед тем, как view будет отсоединено от window.
Обычный doOnDetach нельзя использовать, поскольку view может быть ещё не прикреплено к window, как к примеру в onViewCreated. И тогда наше действие будет сразу же отменено.
Или же обобщим в extension:
В принципе на этом можно остановится. Все проблемы решены. Но этим мы добавляем ещё один тип асинхронного выполнения к нашему проекту, что несколько усложняет его. Сейчас в мире Native Android есть 2 основных решения для асинхронного выполнения кода — Rx и Coroutines.
Попробуем использовать их.
Сразу оговорюсь, что не претендую на 100% правильность по отношению к вашему проекту. В вашем проекте это может быть по другому/лучше/короче.
Coroutines
Обычно во всех проектах есть базовый фрагмент для инжекта зависимостей, настройки di и так далее. Используем его для обобщения работы с отменой отложенных действий:
Нам необходимо отменять все дочерние задачи в onDestroyView, но при этом не закрывать scope, поскольку после этого возможно вновь создание View без пересоздания Fragment. К примеру при роутинге вперёд на другой Fragment и после этого назад на текущий.
В onDestroy уже закрываем scope, так как далее никаких задач не должно быть запущено.
Все подготовительные работы сделаны.
Перейдём к самой замене postDelayed:
Так как нам не нужно, чтобы наши отложенные задачи выполнялись, если view уже уничтожено, просто не запускаем ничего и возвращаем null. Иначе запускаем наше действие с необходимой задержкой. Но теперь при уничтожении view, задача будет отменена и ресурсы будут отпущены.
Как правильно подметил Keanu_Reeves, можно подключить androidx.lifecycle:lifecycle-runtime-ktx:2.2.0-alpha01 или выше и у нас уже будет готовый scope:
В RX за отмену подписок отвечает класс Disposable, но в RX нет Structured concurrency в отличии от coroutine. Из-за этого приходится прописывать это всё самому. Выглядит обычно это примерно так:
Также аналогично отменяем все задачи в базовом фрагменте:
В заключении
При использовании каких-либо отложенных действий нельзя забывать, что это уже асинхронное исполнение, и соответственно оно требует отмены, в противном случае начинают происходить утечки памяти, краши и разные другие неожиданные вещи.
Замена delay() для неблокирующих задержек в Arduino IDE
Первое, с чем сталкивается осваивающий Arduino новичок, это неприятное свойство функции delay() — блокирование выполнения программы. Множество примеров в интернете используют эту функцию, но практическое применение как-то намекает, что лучше без неё обойтись.
Как и положено начинающему, я изобрёл велосипед сделал свою реализацию неблокирующей задержки. Задача стояла так:
В результате получилось вот такое.
Метод Now() возвращает true, если интервал прошёл. В этом случае отсчёт начинается снова на тот же интервал. То есть, Now() каждый раз «перезаряжается» автоматически.
Классическое мигание светодиодом можно сразу усложнить до мигания двумя. Например, лампочки подключены к ножкам 12 и 11, должны мигать с интервалом в 1с и 777мс соответственно.
В цикле можно выполнять ещё что-то, мигание светодиодов не будет блокировать выполнение этого кода.
Понятно, что это не полная замена delay(), который останавливает поток на заданное время, надо писать программу всегда как МКА (механизм конечных автоматов). То есть, хранить состояние и в зависимости от него переходить к нужному месту кода.
Метод Set(интервал) устанавливает новый интервал и возвращает старый. Просто посмотреть на интервал можно методом Get();
Stop() останавливает обработку и Now() всегда возвращает false.
Start() возобновляет работу и Now() начинает работать как обычно.
Если надо притормозить подсчёт времени, но не останавливать совсем, то есть метод Wait(). Например, если мигает светодиод 12, а при нажатии кнопки не мигает, достаточно добавить вот такой код в loop() в примере с двумя диодами выше:
Так, при высоком уровне сигнала на 9 ноге диод на 12 мигать не будет и продолжит, когда там появится 0.
Когда по такому «таймеру» отрисовывается экран, например, и параллельно обрабатываются кнопки, то бывает нужно перерисовать экран или часть сразу после нажатия на кнопку, а не ждать окончания интервала. Для этого служит метод Reset(), после которого следующий вызов Now() вернёт true. Например:
Из багов я вижу только, что не учитывается переполнение счётчика микросекунд, а в остальном да, надо почистить код. Мне не нравится, как сделан Reset(), пока думаю.
Объектный подход мне понравился, позволяет спрятать весь код в библиотеку, в которую можно потом уже никогда не заглядывать. Теперь эта маленькая библиотечка живёт во всем моих проектах 🙂
Task. Delay Method
Definition
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Creates a task that will complete after a time delay.
Overloads
Creates a cancellable task that completes after a specified number of milliseconds.
Creates a cancellable task that completes after a specified time interval.
Creates a task that completes after a specified number of milliseconds.
Creates a task that completes after a specified time interval.
Delay(Int32, CancellationToken)
Creates a cancellable task that completes after a specified number of milliseconds.
Parameters
A cancellation token to observe while waiting for the task to complete.
Returns
A task that represents the time delay.
Exceptions
The task has been canceled.
The provided cancellationToken has already been disposed.
Examples
The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. Before the delay interval elapses, the token is cancelled. The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks’ Status property is set to Canceled.
Remarks
If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.
For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.
This method depends on the system clock. This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.
Applies to
Delay(TimeSpan, CancellationToken)
Creates a cancellable task that completes after a specified time interval.
Parameters
The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.
A cancellation token to observe while waiting for the task to complete.
Returns
A task that represents the time delay.
Exceptions
The delay argument’s TotalMilliseconds property is greater than MaxValue.
The task has been canceled.
The provided cancellationToken has already been disposed.
Examples
The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. Before the delay interval elapses, the token is cancelled. The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks’ Status property is set to Canceled.
Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Although the 1.5 second delay from the call to the Delay(TimeSpan, CancellationToken) method makes that assumption likely, it is nevertheless possible that the call to the Delay(TimeSpan, CancellationToken) method could return before the token is cancelled. In that case, the example produces the following output:
Remarks
If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.
For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.
This method depends on the system clock. This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.
Delays detected как исправить
Возможные проблемы
Какого бы хорошего качества не были составляющие системного блока, рано или поздно возникнут проблемы. А учитывая то, что в среднем на каждого человека, немного разбирающегося в железе и их неисправностях, приходится по 20 человек «дяди, тёти, бабушки, их знакомые» – эта тема уже коснулась всех. Начиная работу с возникшей проблемой, не стоит рассчитывать на её быстрое решение – проверка может занять от нескольких часов до суток, так 1 Тб на компьютере со средними характеристиками будет обрабатываться около суток. Для повышения эффективности восстановления, программкой можно воспользоваться дважды – есть вероятность, что те сектора, которые не удалось восстановить первый раз, всё же поддадутся реанимации. При возможных неисправностях устройства для хранения данных, обращаем внимание проявления:
Способы решения проблем
Битый диск – не самая большая проблема: если его удастся реанимировать – подойдёт для хранения данных, если нет – заменить на другой. Большинство утилит скрывают битые сектора, программы типа HDD Regenerator восстанавливают жёсткий диск. Стоит разобраться, как это сделать грамотно:
Вопросы и ответы в сфере it технологий и настройке ПК
Жесткий диск – один из важнейших элементов компьютера. Во избежание серьезных проблем с компьютером, необходимо следить за состоянием жесткого диска. Если вы задумались о проверке состояния жесткого диска, то целесообразнее всего проделать эту процедуру с помощью программы HDD Regenerator.
HDD Regenerator уникальная тем, что она позволяет восстанавливать битые сектора вашего жесткого диска, в отличие от других программ, которые их просто скрывают. К первым серьезным звоночкам проблем с жестким диском относятся:
1) Долгое открытие папок и файлов;
2) Подолгу зависает компьютер или появляется синий экран;
Этапы проверки жесткого диска.
1. Скачайте HDD Regenerator по ссылке в конце статьи и установите на компьютер.
2. Для использования HDD Regenerator лучше всего создать загрузочную флешку или диск с программой, но самый простой способ начать проверку – загрузить с Windows.
Для этого запустите главное окно программы и откройте в левом верхнем углу вкладку «Regeneration», а затем выберите пункт «Start Process under Windows».
3. В разделе «Choose Drive to Process» выберите диск, который будет подвергаться проверке и восстановлению, а затем нажмите маленький пункт «Start Process».
4. Программа предупредит, что для старта проверки необходимо закрыть все запущенные на компьютере программы. По возможности закройте как можно больше программ.
5. Появится черное окно, в котором управление осуществляется не мышью, а исключительно клавиатурой. Для начала давайте проведем нормальное сканирование, в котором вы сможете выбрать, восстанавливать битые сектора или нет. Этот параметр находится под пунктом номер 2, поэтому наберите эту цифру на клавиатуре и нажмите клавишу Enter.
6. В следующем этапе программа предложит выбрать, собираетесь ли вы восстанавливать битые сектора или хотите ограничиться лишь проверкой с отчетом. Выбрав цифру 1, программа начнет проверку на ошибки с последующим исправлением, второй пункт будет выполнять исключительно проверку.
7. Наблюдайте за ходом выполнения процесса. В нижней части окна будут отображаться выполненный процесс, количество найденных битых секторов и количество исправленных секторов.
8. Как только процесс HDD Regenerator будет окончен, программа отобразит подробный отчет о количестве найденных и исправленных ошибок.
Отдельно хочется отметить пункт «Delays detected», который обозначает задержку. Если в этом пункте стоит слишком высокая цифра, то, скорее всего, проверка диска осуществлялась очень длительное время. Это говорит о том, что жесткий диск порядком изношен и поврежден. В связи с этим целесообразнее произвести его замену.
Заключение. Конечно, HDD Regenerator не является 100% решением всех проблем с жестким диском. По мере возможности программа может помочь с восстановлением битых секторов, но если диск чрезмерно поврежден, то программа уже бессильна.
Скачать HDD Regenerator бесплатно
Отблагодари меня, поделись ссылкой с друзьями в социальных сетях:
Автор: editor · Опубликовано 09.08.2014 · Обновлено 26.09.2016
Покажу как восстановить диск с помощью программы HDD Regenerator 2011. С помощью программы Crystal Disk Info я проверил свой жесткий диск. Столкнулся вот с такой проблемой.
Содержание статьи:
Как видите на моём диске появились переназначенные сектора, нестабильны сектора, неисправимые ошибки секторов.
Покажу как восстановить диск с помощью программы HDD Regenerator 2011.
Скачиваем программу HDD Regenerator 2011 (она бесплатная). Считав с диска S.M.A.R.T. информацию программа также показывает, что мой диск умирает. И рекомендуется сделать копию всех файлов на диске (Backup data immediately).
Проверьте и вы состояние своего жесткого диска, как я показал на видео.
1. Создать загрузочную флешку для восстановления поврежденных секторов.
Чтобы использовать программу по восстановлению поврежденного диска сделаем загрузочную флешку, чтобы безопасно загрузиться с неё и сделать проверку диска и восстановление поврежденных секторов. Для этого понадобится флешка размером более 1 ГБ.
Если попытаться сделать восстановление дефектных секторов диска непосредственно из-под Windows (XP / Vista / 7 / 8), то выдаст ошибку Unable to obtain exclusive access to Hard Drive 1, because disk [C:] is in use. Не удалось получить доступ к жесткому диску С, так как он используется.
Возвращаемся в главное меню программы и нажимаем Загрузочная USB Flash, чтобы сделать загрузочную флешку для восстановления поврежденных секторов.
Выбираем USB Flash диск и нажимаем ОК.
Если выдало ошибку Error has occured! Bootable regenerating flash not created! Произошла ошибка! Загрузочная флешка восстановления не была создана.
Тогда вначале форматируем флешку и стираем с неё все данные. Нажимаем Сброс размера Flash.
Все данные на флешке будут уничтожены а флешка переформатирована. Нажимаем ОК.
Выбираем USB Flash диск и нажимаем ОК.
Готово. Теперь у нас есть загрузочная флешка для восстановления поврежденных секторов на диске. Программа спрашивает перезагрузить компьютер сейчас? Нажимаем Yes. Кстати очень хорошее решение проблемы — это SSD диск можете в статье Как поменять жесткий диск на SSD. Полный разбор.
2. Выставить загрузочную флешку в BIOS на первое место по степени важности загрузки.
Теперь заходим в BIOS нажатием F2 или del или F10 или ту клавишу, что указана в самом начале при включении вашего компьютера слева снизу
На моём ноутбуке Samsung надо нажать F2, чтобы войти в BIOS.
Заходим во вкладку Boot (Загрузка) далее в пункт Boot Device Priority (Приоритет загрузки с устройства).
Здесь указаны все устройства с которых может быть произведена загрузка. В моем случае приоритет стоит так:
1. USB HDD: WD My Passport 0743
2. IDE HDD: ST500LM000-1EJ162
3. IDE CD: TSSTcorp CDDVDW TS-L633A
8. USB HDD: SanDisk Cruzer Blade
то есть сначала идет считывание и поиск загрузочной информации с внешнего жесткого диска, затем если она не найдена переходит поиск к внутреннему жесткому диску, затем если не найдена к DVD-приводу, затем к флешке. А надо поставить, чтобы изначально был поиск загрузочной информации с флешки.
Выбираем флешку и нажимаем F6 чтобы поднять её выше на первое место.
Готов. Теперь загрузочная информация будет вначале искаться на флешке.
Нажимаем F10, чтобы сохранить настройки BIOS.
Выбираем Yes, чтобы сохранить конфигурацию и выйти из BIOS.
3. Восстановление поврежденных секторов с помощью HDD Regenerator 2011
Итак теперь мы загрузились с флешки. Тут отображены диски подключенные к компьютеру. У меня
Это 1 диск просто разделён на 2 части. Выбираем тот что больше, т.е. номер 2 (набираем на клавиатуре) и нажимаем Enter.
1. Prescan (show bad sectors). Предварительное сканирование (показать плохие секторы)
2. Normal Scan (with / without repair). Нормальное сканирование (с без восстановления)
3. Version Info. Информация о версии.
4. Show Statistics. Показать статистику.
Для начала сделаем предварительное сканирование и узнаем сколько плохих секторов есть на диске. Набираем на клавиатуре цифру 1 и нажимаем Enter.
1. Start Sector 0. Начать с сектора 0.
2. Resume Last Proccess. Возобновить предыдущий процесс.
3. Set Start/End Sectors Manually. Установить начальныйконечный сектор вручную.
Начнем сканирование с нулевого (начального) сектора диска. Набираем на клавиатуре цифру 1 и нажимаем Enter.
Началось предварительное сканирование и поиск поврежденных и плохих секторов.
Спустя какое-то время предварительное сканирование обнаружило что у меня имеются плохие и поврежденные сектора на диске.
Спустя 1 час 48 минут предварительное сканирование выдало результат и показало, что у меня на диске более 46 поврежденных секторов. Они обозначаются буквой B — bad. Также были обнаружены задержки на диске (124), они обозначаются буквой D — delay.
1. List sectors scanned. Список просканированных секторов.
2. List this session sectors. Список секторов этой сессии.
3. List all sectors. Список всех секторов.
4. Clear Drive Map statistics. Очистить статистику диска.
Просмотрим список просканированных секторов. Набираем на клавиатуре цифру 1 и нажимаем Enter.
Вот список. Посмотрев его нажимаем любую клавишу, чтобы выйти из списка.
Вернувшись в главное меню программы.
1. Prescan (show bad sectors). Предварительное сканирование (показать плохие секторы)
2. Normal Scan (with / without repair). Нормальное сканирование (с без восстановления)
3. Version Info. Информация о версии.
4. Show Statistics. Показать статистику.
Теперь начнем сканирование и восстановление поврежденных секторов. Набираем на клавиатуре цифру 2 и нажимаем Enter.
1. Scan and repair. Сканировать и исправить.
2. Scan, but do not repair (show bad sectors). Сканировать, но не исправлять (показать плохие секторы).
3. Regerate all sectors in a range (even if not bad). Восстановить все плохие секторы в диапазоне (даже если не плохие).
Набираем на клавиатуре цифру 1 и нажимаем Enter.
1. Scan Sectors 0. Начать с сектора 0.
2. Resume Last Proccess. Возобновить последний процесс.
3. Set Start/End Sectors Manually. Установить начальный конечный сектор вручную.
Начнем сканирование и восстановление поврежденных секторов диска с нулевого сектора. Набираем на клавиатуре цифру 1 и нажимаем Enter.
Сканирование и восстановление секторов началось. Это может занять очень много времени (до нескольких дней) в зависимости от размера диска и количества поврежденных секторов. Но вы можете закончить восстановление и сканирование, а продолжить его потом, хоть через несколько дней или даже недель. На флешке сохранится ваш прогресс в восстановлении и то место, где вы остановитесь.
Спустя около 2 часов прогресс завершился на 45% и было обнаружено и восстановлено 140 поврежденных секторов на диске.
Спустя около 8 часов прогресс стал 55% и было обнаружено и восстановлено 827 поврежденных секторов на диске.
Спустя около 20 часов прогресс стал 56% и было обнаружено и восстановлено 5 753 поврежденных секторов на диске. И сверху справа появилась надпись Interface HANG-UP! Set-up BIOS to compatible IDE mode! Интерфейс повис! Установить BIOS в совместимый IDE режим. Но в моем BIOS нету режима IDE. У меня ноутбук и там только режим SATA. Это ошибка программы, т.к. она думает, что жесткий диск работает не в том режиме, но на самом деле. Поврежденных секторов на моем жестком диске настолько много, что весь процесс по восстановлению почти подвисает и движется ооооооооооочень медлеееееееееееенно.
Я прервал процесс нажав ESC. И загрузил Windows поработал в нем поведение диска стало заметно получше и он стал меньше подвисать. Потом на следующий день я вновь загрузился с флешки и продолжил восстановление диска.
Вернувшись в главное меню программы.
1. Prescan (show bad sectors). Предварительное сканирование (показать плохие секторы)
2. Normal Scan (with / without repair). Нормальное сканирование (с без восстановления)
3. Version Info. Информация о версии.
4. Show Statistics. Показать статистику.
Продолжим сканирование и восстановление поврежденных секторов. Набираем на клавиатуре цифру 2 и нажимаем Enter.
1. Continue proccess. Продолжить процесс.
2. Show statistics. Показать статистику.
3. Change start/end sectors. Изменить начальный конечный сектор.
4. Change mode. Изменить режим.
5. Exit program. Выйти из программы.
Продолжим процесс восстановления поврежденных секторов. Набираем на клавиатуре цифру 1 и нажимаем Enter.
Процесс продолжается с того же места на котором был прерван.
Спустя сутки процесс стал 60% и было обнаружено и восстановлено 8 342 поврежденных секторов на диске.
Спустя еще какое-то время процесс вообще завис остановившись и восстановив 10 001 секторов. Появилась надпись Drive is not ready! Диск не готов!
Но это опять же проблема конкретно моего диска, который уже находится при смерти и есть места на диске перейдя в которые диск просто становится загруженным на 100% и намертво повисает и спасает от этого только выключение и включение компьютера вновь.
В итоге статистика показала, что восстановила очень много поврежденных секторов, но дойдя до тех секторов в которых диск намертво зависал она не смогла восстановить их.
Позже при попытке продолжить сканирование и восстановление поврежденных секторов на диске. Программа выдавало надпись о том, что Диск не готов, перезагрузите компьютер и попробуйте снова продолжить процесс.
Это проблема конкретно моего случая, в котором при переходе в определенный сектор диска диск полностью повисал. Дальше я не стал пробовать его восстановить (это занимало очень много времени и я думаю мой диск уже невозможно восстановить, только если обрезать его в размере отделив дефектную (мертвую часть) от целой, но тогда жесткий диск уменьшится в размере) я просто скопировал данные что мог и купил себе новый жесткий диск. Стоят жесткий диски для ноутбуков от 1500 руб. В принципе это не дорого и можно себе позволить.
4. Итоги
Прежде чем покупать новый диск советую попробовать его восстановить. А если уже не получится по какой-то причине, то покупайте новый. Также никогда не забывайте иметь второй жесткий диск на которой периодически копируйте всю информацию с основного диска.
Для верности можно еще проверить жесткий диск на ошибки и восстановить поврежденные секторы.
Про Windows у меня также есть другие уроки: