Программа зависает в процессах, но не запускает windows 10

Обновлено: 02.12.2024

После обновления до последней версии Windows 10 я столкнулся с несколькими проблемами. Самая большая из них заключается в том, что после входа в систему и ожидания завершения загрузки я не могу открыть ни одну программу на своем компьютере, за исключением диспетчера задач. У кого-нибудь есть эта проблема? Есть ли способ это исправить? Я не могу использовать свой компьютер уже 3 дня из-за этой и нескольких других проблем.

Я должен добавить, что после попытки открыть одну программу (chrome) она не отображается как работающее приложение и не отображается в запущенных процессах в диспетчере задач.

Эта тема заблокирована. Вы можете подписаться на вопрос или проголосовать за него как полезный, но вы не можете отвечать в этой теме.

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

Ответы (48) 

* Попробуйте уменьшить номер страницы.

* Пожалуйста, вводите только цифры.

* Попробуйте уменьшить номер страницы.

* Пожалуйста, вводите только цифры.

Спасибо, что разместили свой запрос в сообществе Microsoft.

Приносим извинения за доставленные неудобства. Я буду рад помочь вам в этом.

Чтобы помочь вам лучше, ответьте на следующие вопросы:
1. Вы получаете сообщение об ошибке при попытке открыть программы?
2. Возникает ли проблема с программами Microsoft?


Я бы посоветовал вам попробовать приведенные ниже методы и проверить, помогает ли это.

Способ 1. Чистая загрузка

Перевод системы в состояние чистой загрузки помогает определить, не вызывают ли проблему какие-либо сторонние приложения или элементы автозагрузки. Вам необходимо выполнить шаги из статьи, упомянутой ниже, чтобы выполнить чистую загрузку.
Как выполнить чистую загрузку (относится к Windows 10)


Примечание.
После устранения неполадок выполните действия, описанные в разделе «Как перезагрузить компьютер, чтобы он запускался как обычно после устранения неполадок с помощью чистой загрузки», чтобы перезагрузить компьютер. как обычно.

Способ 2. Сканер безопасности Microsoft

Я бы посоветовал вам запустить сканер безопасности Microsoft и проверить, решает ли он проблему

Примечание. Срок действия сканера безопасности Microsoft истекает через 10 дней после загрузки. Чтобы повторно запустить сканирование с последними определениями защиты от вредоносных программ, снова загрузите и запустите сканер безопасности Microsoft.

Отказ от ответственности в отношении сканера безопасности: возможна потеря данных при сканировании с помощью сканера безопасности Microsoft для устранения вирусов, если таковые имеются.


Если это не помогло, перейдите к следующему способу запуска проверки системных файлов.

Способ 3. Проверка системных файлов
Проверка системных файлов (SFC) выполняется для проверки наличия поврежденных системных файлов, которые могут вызывать эту проблему. Пожалуйста, следуйте инструкциям ниже:

<р>1. Нажмите клавишу Windows + X, выберите Командная строка (Администратор), чтобы вызвать командную строку с повышенными правами.
2. В командной строке введите sfc /scannow и нажмите Enter.

Закройте командную строку, перезагрузите компьютер и проверьте, работает ли она.

Сообщите нам о результате. Мы будем рады помочь, если вам понадобится дополнительная помощь.

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

48 человек сочли этот ответ полезным

Был ли этот ответ полезен?

Извините, это не помогло.

Отлично! Благодарим за отзыв.

Насколько вы удовлетворены этим ответом?

Спасибо за ваш отзыв, он помогает нам улучшить сайт.

Насколько вы удовлетворены этим ответом?

Спасибо за отзыв.

Я испробовал все три метода, и ни один из них не сработал. Вчера вечером я попытался войти в систему, но проснулся и увидел экран, на котором по-прежнему говорилось о входе в систему. Также нет сообщений об ошибках, и это происходит со всеми программами (Microsoft, панель задач и т. д.), кроме диспетчера задач.

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

30 человек считают этот ответ полезным

Был ли этот ответ полезен?

Извините, это не помогло.

Отлично! Благодарим за отзыв.

Насколько вы удовлетворены этим ответом?

Спасибо за ваш отзыв, он помогает нам улучшить сайт.

Насколько вы удовлетворены этим ответом?

Спасибо за отзыв.

У меня точно такая же проблема. Когда я начал использовать свой компьютер этим утром, все было хорошо, за исключением того, что он был очень медленным. Я перезапустил его и начал иметь эту проблему. Я не могу открыть ни одну программу или меню «Пуск». Когда я дважды щелкаю программу на рабочем столе, курсор примерно на секунду принимает вид синего круга загрузки, а затем возвращается в нормальное состояние, и ничего не происходит.

Никакие команды, кроме cntrl alt del, не работают. Это то, что я использовал для доступа к диспетчеру задач. Оттуда он говорит, что 99% ЦП используется, но все процессы, которые он показывает, показывают 0 использования.

Когда я пытаюсь перезапустить компьютер из меню cntrl alt del, компьютер говорит, что застрял на синей странице, что означает "перезагрузка". Как это исправить?

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

24 человека сочли этот ответ полезным

Был ли этот ответ полезен?

Извините, это не помогло.

Отлично! Благодарим за отзыв.

Насколько вы удовлетворены этим ответом?

Спасибо за ваш отзыв, он помогает нам улучшить сайт.

Насколько вы удовлетворены этим ответом?

Спасибо за отзыв.

Я по-прежнему не могу пользоваться своим компьютером. Я собираюсь попробовать загрузить его в безопасном режиме, чтобы попытаться исправить это таким образом, но в прошлый раз, когда я пытался, мой компьютер завис. Очевидно, один из моих друзей исправил эту проблему на своем компьютере, но он не отвечает мне, когда я спрашиваю его, как это сделать. Единственное другое решение, которое я смог придумать, это переустановить ОС. Даже когда я позвонил специалисту Microsoft, он понятия не имел, как это исправить, и мы пытались буквально 3 часа. Если разберусь, напишу здесь.

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

4 человека сочли этот ответ полезным

Был ли этот ответ полезен?

Извините, это не помогло.

Отлично! Благодарим за отзыв.

Насколько вы удовлетворены этим ответом?

Спасибо за ваш отзыв, он помогает нам улучшить сайт.

Насколько вы удовлетворены этим ответом?

Спасибо за отзыв.

Спасибо за обновленную информацию по проблеме.

Давайте выполним указанные ниже шаги и проверим, помогает ли это:

Новая учетная запись пользователя

Попробуйте выполнить эти действия, чтобы создать новую учетную запись пользователя и проверить, устраняет ли это проблему. Чтобы создать новую учетную запись пользователя, выполните следующие действия:

<р>1. Перейдите в настройки.

<р>2. Выберите «Учетные записи», а затем слева выберите «Другие учетные записи пользователей».

<р>3. Выберите Добавить учетную запись.

<р>4. Введите имя пользователя и нажмите «Далее».

<р>5. Нажмите «Готово».

<р>6. Выйдите из текущей учетной записи и войдите в новую.

<р>7. Проверьте, сохраняется ли проблема.

В дополнение к вышеуказанным шагам я бы посоветовал вам обратиться к упомянутой ниже статье Microsoft для получения дополнительной информации

Надеюсь, эта информация окажется полезной. Пожалуйста, напишите нам, если вам понадобится дополнительная помощь, мы будем рады вам помочь.

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

4 человека сочли этот ответ полезным

Был ли этот ответ полезен?

Извините, это не помогло.

Отлично! Благодарим за отзыв.

Насколько вы удовлетворены этим ответом?

Спасибо за ваш отзыв, он помогает нам улучшить сайт.

Насколько вы удовлетворены этим ответом?

Спасибо за отзыв.

Я понял, почему у меня так много проблем со входом в систему и открытием программ. Я купил новую копию Windows 7 Pro, выполнил полное форматирование (с резервными копиями файлов, когда у меня была Windows 10) моего ПК и установил новую ОС. После этого я подключил кабель Ethernet и обнаружил, что у меня нет подключения к Интернету. С тех пор я копался и обнаружил, что все мои сетевые и USB-драйверы, когда у меня была Windows 10, были таинственным образом удалены. Затем я пошел и схватил ноутбук моей сестры, загрузил сетевые драйверы на флэш-накопитель, установил их на свой компьютер, используя один из двух USB-портов, которые все еще работали, и продолжил загрузку оставшихся необходимых мне драйверов. На самом деле это очень легко исправить, но почти невозможно сделать в Windows 10, потому что без подключения к Интернету вы не можете войти в свой компьютер.

Это должно быть как-то исправлено со стороны Microsoft. Как бы то ни было, все это, которое было бы быстрым и бесплатным, если бы я никогда не обновлялся, в конечном итоге стоило мне 3 месяцев потенциальной оплаты (я зарабатываю на жизнь созданием и потоковым видео) и дополнительных 145 долларов за новую ОС.

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

Пользователям нравятся адаптивные приложения. Когда они щелкают меню, они хотят, чтобы приложение реагировало мгновенно, даже если оно в данный момент печатает их работу. Когда они сохраняют длинный документ в своем любимом текстовом процессоре, они хотят продолжать печатать, пока диск все еще вращается. Пользователи довольно быстро теряют терпение, когда приложение не реагирует своевременно на их ввод.

Программист может распознать множество законных причин, по которым приложение не может мгновенно реагировать на действия пользователя. Приложение может быть занято пересчетом некоторых данных или просто ожидает завершения дискового ввода-вывода. Однако из исследований пользователей мы знаем, что пользователи раздражаются и разочаровываются уже через пару секунд бездействия. Через 5 секунд они попытаются завершить зависшее приложение.Помимо сбоев, зависание приложений является наиболее распространенной причиной прерывания работы пользователей при работе с приложениями Win32.

Существует много различных основных причин зависания приложения, и не все из них проявляются в неотвечающем пользовательском интерфейсе. Однако не отвечающий пользовательский интерфейс является одним из наиболее распространенных случаев зависания, и в настоящее время этот сценарий получает наибольшую поддержку операционной системы как для обнаружения, так и для восстановления. Windows автоматически обнаруживает, собирает отладочную информацию и при необходимости завершает или перезапускает зависшие приложения. В противном случае пользователю может потребоваться перезагрузить компьютер, чтобы восстановить зависшее приложение.

Зависания – операционная система

Когда приложение (точнее, поток) создает окно на рабочем столе, оно заключает неявный контракт с диспетчером окон рабочего стола (DWM) для своевременной обработки оконных сообщений. DWM отправляет сообщения (ввод с клавиатуры/мыши и сообщения из других окон, а также самого себя) в очередь сообщений для конкретного потока. Поток извлекает и отправляет эти сообщения через свою очередь сообщений. Если поток не обслуживает очередь, вызывая GetMessage(), сообщения не обрабатываются, и окно зависает: оно не может ни перерисовать, ни принять ввод от пользователя. Операционная система определяет это состояние, прикрепляя таймер к ожидающим сообщениям в очереди сообщений. Если сообщение не было получено в течение 5 секунд, DWM объявляет окно зависшим. Вы можете запросить это конкретное состояние окна через API IsHungAppWindow().

Обнаружение — это только первый шаг. В этот момент пользователь по-прежнему не может даже закрыть приложение — нажатие кнопки X (Закрыть) приведет к появлению сообщения WM_CLOSE, которое застрянет в очереди сообщений, как и любое другое сообщение. Диспетчер окон рабочего стола помогает плавно скрыть, а затем заменить зависшее окно «призрачной» копией, отображающей растровое изображение предыдущей клиентской области исходного окна (и добавляя «Не отвечает» в строку заголовка). Пока поток исходного окна не извлекает сообщения, DWM управляет обоими окнами одновременно, но позволяет пользователю взаимодействовать только с фантомной копией. Используя это фантомное окно, пользователь может только перемещать, сворачивать и, самое главное, закрывать не отвечающее приложение, но не изменять его внутреннее состояние.

Призрачный опыт выглядит так:

Диспетчер окон рабочего стола делает еще одну вещь; он интегрируется с отчетами об ошибках Windows, позволяя пользователю не только закрывать и при необходимости перезапускать приложение, но и отправлять ценные отладочные данные обратно в Microsoft. Вы можете получить эти данные о зависании для своих собственных приложений, зарегистрировавшись на веб-сайте Winqual.

В Windows 7 к этому интерфейсу добавлена ​​одна новая функция. Операционная система анализирует зависшее приложение и при определенных обстоятельствах дает пользователю возможность отменить операцию блокировки и снова заставить приложение реагировать. Текущая реализация поддерживает отмену блокирующих вызовов Socket; в будущих версиях пользователь сможет отменить больше операций.

Чтобы интегрировать приложение с функцией восстановления после зависания и максимально эффективно использовать доступные данные, выполните следующие действия:

  • Убедитесь, что ваше приложение регистрируется для перезапуска и восстановления, чтобы сделать зависание максимально безболезненным для пользователя. Правильно зарегистрированное приложение может автоматически перезапускаться с сохранением большей части несохраненных данных. Это работает как при зависании, так и при сбое приложения.
  • Получите информацию о частоте, а также данные об отладке для ваших зависших и аварийно завершенных приложений на веб-сайте Winqual. Вы можете использовать эту информацию даже во время бета-тестирования, чтобы улучшить свой код. См. краткий обзор в разделе "Введение в отчеты об ошибках Windows".
  • Вы можете отключить функцию фантома в своем приложении, вызвав DisableProcessWindowsGhosting(). Однако это не позволяет обычному пользователю закрыть и перезапустить зависшее приложение и часто заканчивается перезагрузкой.

Зависания – точка зрения разработчика

Операционная система определяет зависание приложения как поток пользовательского интерфейса, который не обрабатывал сообщения в течение как минимум 5 секунд. Очевидные ошибки вызывают некоторые зависания, например, поток, ожидающий события, которое никогда не сигнализируется, и два потока, каждый из которых удерживает блокировку и пытается захватить другие. Вы можете исправить эти ошибки без особых усилий. Однако многие зависания не так очевидны. Да, поток пользовательского интерфейса не извлекает сообщения, но он в равной степени занят другой «важной» работой и в конечном итоге вернется к обработке сообщений.

Однако пользователь воспринимает это как ошибку. Дизайн должен соответствовать ожиданиям пользователя. Если дизайн приложения приводит к тому, что приложение не отвечает, дизайн придется изменить. Наконец, и это важно, зависание нельзя исправить, как ошибку в коде; это требует предварительной работы на этапе проектирования.Попытка модифицировать существующую кодовую базу приложения, чтобы сделать пользовательский интерфейс более отзывчивым, часто обходится слишком дорого. Следующие рекомендации по дизайну могут помочь.

  • Сделать отзывчивость пользовательского интерфейса требованием высшего уровня; пользователь всегда должен чувствовать контроль над вашим приложением
  • Убедитесь, что пользователи могут отменять операции, выполнение которых занимает более одной секунды, и/или что операции могут выполняться в фоновом режиме; предоставить соответствующий интерфейс прогресса, если это необходимо
  • Помещать в очередь длительные или блокирующие операции как фоновые задачи (для этого требуется хорошо продуманный механизм обмена сообщениями, чтобы информировать поток пользовательского интерфейса о завершении работы)
  • Сохраняйте простой код потоков пользовательского интерфейса; удалите как можно больше блокирующих вызовов API
  • Показывать окна и диалоговые окна только тогда, когда они готовы и полностью готовы к работе. Если диалоговое окно должно отображать информацию, которая слишком ресурсоемка для расчета, сначала покажите некоторую общую информацию и обновите ее на лету, когда станет доступно больше данных. Хорошим примером является диалоговое окно свойств папки из проводника Windows. Он должен отображать общий размер папки, информацию, которая недоступна из файловой системы. Диалоговое окно появляется сразу же, и поле «размер» обновляется из рабочего потока:

К сожалению, не существует простого способа спроектировать и написать адаптивное приложение. Windows не предоставляет простой асинхронной платформы, которая позволила бы легко планировать блокировку или длительные операции. В следующих разделах представлены некоторые передовые методы предотвращения зависаний и выделены некоторые распространенные ловушки.

Рекомендации

Сохраняйте поток пользовательского интерфейса простым

Основной задачей потока пользовательского интерфейса является извлечение и отправка сообщений. Любая другая работа связана с риском зависания окон, принадлежащих этому потоку.

Выполнить:

  • Перенесите ресурсоемкие или неограниченные алгоритмы, которые приводят к длительным операциям, в рабочие потоки.
  • Определите как можно больше блокирующих вызовов функций и попытайтесь переместить их в рабочие потоки; любая функция, вызывающая другую DLL, должна быть подозрительной
  • Приложите дополнительные усилия, чтобы удалить все вызовы файлового ввода-вывода и сетевых API из рабочего потока. Эти функции могут блокироваться на многие секунды, если не на минуты. Если вам нужно выполнять какие-либо операции ввода-вывода в потоке пользовательского интерфейса, рассмотрите возможность использования асинхронного ввода-вывода
  • .
  • Учтите, что ваш поток пользовательского интерфейса также обслуживает все COM-серверы однопотокового подразделения (STA), размещенные вашим процессом; если вы делаете блокирующий вызов, эти COM-серверы не будут отвечать до тех пор, пока вы снова не обслужите очередь сообщений

Нельзя:

  • Подождать любой объект ядра (например, событие или мьютекс) дольше очень короткого промежутка времени; если вам вообще нужно ждать, рассмотрите возможность использования MsgWaitForMultipleObjects(), которая разблокируется при поступлении нового сообщения
  • Общий доступ к очереди оконных сообщений потока другому потоку с помощью функции AttachThreadInput(). Не только крайне сложно правильно синхронизировать доступ к очереди, но также это может помешать операционной системе Windows правильно определить зависшее окно
  • Используйте TerminateThread() в любом из ваших рабочих потоков. Завершение потока таким образом не позволит ему снимать блокировки или сигнализировать о событиях и может легко привести к потерянным объектам синхронизации
  • Вызывать любой "неизвестный" код из потока пользовательского интерфейса. Это особенно верно, если ваше приложение имеет модель расширяемости; нет гарантии, что сторонний код соответствует вашим рекомендациям по быстродействию.
  • Сделать любой вид блокирующего широковещательного вызова; SendMessage(HWND_BROADCAST) отдает вас на милость любого плохо написанного приложения, работающего в данный момент

Внедрение асинхронных шаблонов

Удаление длительных или блокирующих операций из потока пользовательского интерфейса требует реализации асинхронной платформы, позволяющей переносить эти операции в рабочие потоки.

Выполнить:

  • Используйте API асинхронных оконных сообщений в потоке пользовательского интерфейса, особенно заменив SendMessage одним из его неблокирующих одноранговых узлов: PostMessage, SendNotifyMessage или SendMessageCallback.
  • Используйте фоновые потоки для выполнения длительных или блокирующих задач. Используйте новый API пула потоков для реализации рабочих потоков.
  • Поддержка отмены длительных фоновых задач. Для блокировки операций ввода-вывода используйте отмену ввода-вывода, но только в крайнем случае; отменить "правильную" операцию непросто
  • Реализовать асинхронный дизайн для управляемого кода с помощью шаблона IAsyncResult или с помощью событий.

Используйте блокировки с умом

Вашему приложению или DLL нужны блокировки для синхронизации доступа к внутренним структурам данных. Использование нескольких блокировок увеличивает параллелизм и делает ваше приложение более отзывчивым.Однако использование нескольких блокировок также увеличивает вероятность получения этих блокировок в другом порядке и приводит к взаимоблокировке ваших потоков. Если каждый из двух потоков удерживает блокировку, а затем попытается получить блокировку другого потока, их операции сформируют циклическое ожидание, которое блокирует любое продвижение вперед для этих потоков. Вы можете избежать этой взаимоблокировки, только обеспечив, чтобы все потоки в приложении всегда получали все блокировки в одном и том же порядке. Однако не всегда легко получить блокировки в «правильном» порядке. Компоненты программного обеспечения могут быть составлены, но не могут быть получены блокировки. Если ваш код вызывает какой-либо другой компонент, блокировки этого компонента теперь становятся частью вашего неявного порядка блокировок, даже если вы не видите эти блокировки.

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

Хуже того, операционная система имеет собственную внутреннюю блокировку для конкретного процесса, которая иногда удерживается во время выполнения вашего кода. Эта блокировка устанавливается, когда библиотеки DLL загружаются в процесс, и поэтому называется «блокировкой загрузчика». Функция DllMain всегда выполняется под блокировкой загрузчика; если вы устанавливаете какие-либо блокировки в DllMain (а ​​вы не должны этого делать), вам нужно сделать блокировку загрузчика частью вашего порядка блокировки. Вызов определенных Win32 API также может получить блокировку загрузчика от вашего имени — такие функции, как LoadLibraryEx, GetModuleHandle и особенно CoCreateInstance.

Чтобы связать все это воедино, взгляните на приведенный ниже пример кода. Эта функция получает несколько объектов синхронизации и неявно определяет порядок блокировки, что не всегда очевидно при беглом осмотре. При входе в функцию код получает критическую секцию и не освобождает ее до выхода из функции, тем самым делая ее верхним узлом в нашей иерархии блокировок. Затем код вызывает функцию Win32 LoadIcon(), которая может вызвать загрузчик операционной системы для загрузки этого двоичного файла. Эта операция получит блокировку загрузчика, которая теперь также становится частью этой иерархии блокировок (убедитесь, что функция DllMain не получает блокировку g_cs). Затем код вызывает SendMessage(), блокирующую межпотоковую операцию, которая не вернется, пока поток пользовательского интерфейса не ответит. Опять же, убедитесь, что поток пользовательского интерфейса никогда не получает g_cs.

Глядя на этот код, становится ясно, что мы неявно сделали g_cs блокировкой верхнего уровня в нашей иерархии блокировок, даже если мы хотели только синхронизировать доступ к переменным-членам класса.

Выполнить:

  • Разработайте иерархию блокировок и соблюдайте ее. Добавьте все необходимые замки. Существует гораздо больше примитивов синхронизации, чем просто Mutex и CriticalSections; все они должны быть включены. Включите блокировку загрузчика в свою иерархию, если вы используете какие-либо блокировки в DllMain()
  • Согласитесь с протоколом блокировки для ваших зависимостей. Любой код, который вызывает ваше приложение или который может вызвать ваше приложение, должен использовать одну и ту же иерархию блокировок.
  • Блокировка структур данных, а не функций. Отодвиньте получение блокировок от точек входа в функции и защитите доступ только к данным с помощью блокировок. Чем меньше кода работает под блокировкой, тем меньше вероятность взаимоблокировок.
  • Проанализируйте получение и освобождение блокировок в коде обработки ошибок. Часто иерархия блокировок забывается при попытке восстановления после ошибки.
  • Замените вложенные блокировки счетчиками ссылок — они не могут блокироваться. Индивидуально заблокированные элементы в списках и таблицах являются хорошими кандидатами.
  • Будьте осторожны, ожидая дескриптора потока из библиотеки DLL. Всегда предполагайте, что ваш код может быть вызван под блокировкой загрузчика. Лучше подсчитать ссылки на ваши ресурсы и позволить рабочему потоку выполнить свою собственную очистку (а затем использовать FreeLibraryAndExitThread для корректного завершения)
  • Используйте API обхода цепочки ожидания, если хотите диагностировать собственные взаимоблокировки.

Нельзя:

  • Выполните что-нибудь, кроме очень простой инициализации в вашей функции DllMain(). Дополнительные сведения см. в разделе Функция обратного вызова DllMain. Особенно не вызывайте LoadLibraryEx или CoCreateInstance
  • Напишите свои собственные примитивы блокировки. Пользовательский код синхронизации может легко внести незаметные ошибки в ваш код. Вместо этого используйте богатый выбор объектов синхронизации операционной системы.
  • Выполняйте любую работу в конструкторах и деструкторах для глобальных переменных, они выполняются под блокировкой загрузчика

Будьте осторожны с исключениями

Исключения позволяют разделить обычный поток программы и обработку ошибок.Из-за такого разделения может быть трудно узнать точное состояние программы до возникновения исключения, и обработчик исключений может пропустить важные этапы восстановления допустимого состояния. Это особенно верно для получения блокировки, которую необходимо снять в обработчике, чтобы предотвратить будущие взаимоблокировки.

Приведенный ниже пример кода иллюстрирует эту проблему. Неограниченный доступ к переменной «buffer» иногда приводит к нарушению прав доступа (AV). Этот AV перехватывается собственным обработчиком исключений, но у него нет простого способа определить, был ли критический раздел уже получен во время исключения (AV мог даже иметь место где-то в коде EnterCriticalSection).

Что делать, если Windows зависает во время запуска

Тим Фишер имеет более чем 30-летний опыт работы в сфере технологий. Он пишет о технологиях более двух десятилетий и является вице-президентом и генеральным директором Lifewire.

Майкл Хайне — сертифицированный CompTIA писатель, редактор и сетевой инженер с более чем 25-летним опытом работы в сфере телевидения, обороны, интернет-провайдеров, телекоммуникаций и образования.

Особенно неприятная причина, по которой ваш компьютер может не запускаться, — это когда вы сталкиваетесь с проблемой во время процесса запуска Windows, но вам нечего делать — нет синего экрана смерти (BSOD) или другого сообщения об ошибке.

Возможно, Windows 7 зависает при запуске, что вынуждает вас смотреть на "Запуск Windows" в течение часа. Вы вынуждены перезагружаться вручную только для того, чтобы увидеть, как он снова зависает на том же месте. Или, возможно, ваш компьютер с Windows 10 автоматически перезагружается через некоторое время после начала загрузки, вызывая так называемый «цикл перезагрузки».

Иногда ваш компьютер может даже остановиться в точке, где вы можете перемещать мышь, но ничего не происходит. Может показаться, что Windows все еще пытается запуститься, но в конце концов вам придется перезагрузить компьютер вручную, чтобы снова увидеть то же самое поведение!

Это руководство применимо к любой версии Windows, в том числе от Windows 10 до Windows XP.

Как исправить проблемы с остановкой, зависанием и перезагрузкой во время запуска Windows

Выключите компьютер, а затем снова включите его. К сожалению, вы не можете правильно перезагрузить Windows, потому что она загружена не полностью, поэтому вам придется делать это вручную.

При запуске Windows в фоновом режиме происходит множество процессов. Иногда все работает не так, как должно, особенно после того, как Windows установила обновления или произошли другие серьезные изменения в операционной системе, когда она в последний раз запускалась и работала. Возможно, перезагрузка — это все, что нужно Windows, чтобы вернуться в нужное русло.

Возможно, ваш компьютер настроен на перезагрузку после BSOD. При желании вы можете отключить автоматический перезапуск при сбое системы.

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

Исправьте установку Windows. Распространенной причиной зависания или автоматической перезагрузки Windows во время процесса запуска Windows является то, что один или несколько важных файлов Windows повреждены или отсутствуют. При восстановлении Windows эти важные файлы заменяются без удаления или изменения чего-либо еще на вашем компьютере.

В Windows 10 это называется «Сбросить этот компьютер». В Windows 8 это называется «Перезагрузить компьютер» или «Обновить компьютер». В Windows 7 и Vista это называется восстановлением при загрузке. В Windows XP это называется ремонтной установкой.

Ремонтная установка Windows XP более сложна и имеет больше недостатков, чем варианты восстановления, доступные в других операционных системах. Итак, если вы являетесь пользователем XP, вы можете подождать, пока не выполните шаги с 4 по 6, прежде чем попробовать это.

Запустите Windows, используя последнюю удачную конфигурацию. Если вы только что внесли изменения в свой компьютер, которые, как вы подозреваете, могли привести к неправильной загрузке Windows, может помочь запуск с последней удачной конфигурации.

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

Запустите Windows в безопасном режиме, а затем используйте функцию восстановления системы, чтобы отменить недавние изменения. Windows может зависнуть, остановиться или перезагрузиться во время запуска из-за повреждения драйвера устройства, важного файла или части реестра. Восстановление системы вернет все эти вещи в их последнее рабочее состояние, что может полностью решить вашу проблему.

В зависимости от причины, по которой Windows не запускается, вы даже не сможете войти в безопасный режим. К счастью, вы также можете выполнить восстановление системы из дополнительных параметров запуска в Windows 10 или Windows 8 или параметров восстановления системы в Windows 7 или Windows Vista, а также с установочного DVD-диска Windows.

Имейте в виду, что вы не сможете отменить восстановление системы, если оно выполняется в безопасном режиме или с помощью параметров восстановления системы. Вам может быть все равно, так как вы все равно не можете нормально запустить Windows, но вам следует об этом знать.

Повторно проверьте компьютер на наличие вирусов в безопасном режиме. Вирус или другое вредоносное ПО могло вызвать достаточно серьезную проблему с частью Windows, из-за которой она перестала нормально запускаться.

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

Очистите CMOS. Очистка памяти BIOS на материнской плате вернет настройки BIOS к заводским значениям по умолчанию. Неправильная настройка BIOS может быть причиной того, что Windows зависает при запуске.

Если очистка CMOS действительно устраняет проблему с запуском Windows, убедитесь, что будущие изменения в BIOS вносятся по одному, чтобы, если проблема вернется, вы знали, какое изменение вызвало проблему.

Замените батарею CMOS, если вашему компьютеру больше трех лет или если он был выключен в течение длительного периода времени.

КМОП-батареи очень недороги, и батарея, которая больше не держит заряд, безусловно, может быть причиной зависания, остановки или перезагрузки Windows во время запуска.

Переустановите все, до чего сможете дотянуться. Это восстановит различные соединения внутри вашего компьютера и очень часто является «волшебным» решением для таких проблем с запуском, особенно циклов перезагрузки и зависаний.

Попробуйте переустановить следующее оборудование и проверьте, правильно ли загрузится Windows:

Отсоедините и снова подключите клавиатуру, мышь и другие внешние устройства.

Проверьте причины короткого замыкания внутри вашего компьютера. Короткое замыкание часто является причиной циклической перезагрузки и жестких зависаний при запуске Windows.

Проверьте оперативную память. Если один из модулей оперативной памяти вашего компьютера полностью выйдет из строя, ваш компьютер даже не включится. Однако в большинстве случаев память медленно отказывает и будет работать до определенного момента.

Если ваша системная память выходит из строя, ваш компьютер может включаться, но затем зависать, останавливаться или непрерывно перезагружаться в какой-то момент во время запуска Windows.

Замените память на компьютере, если тест памяти показывает какую-либо проблему.

Проверьте блок питания. То, что ваш компьютер изначально включается, не означает, что блок питания работает. Хотя ваш компьютер может не дойти до процесса запуска Windows с поврежденным блоком питания, такое случается, и на это стоит обратить внимание.

Замените блок питания, если тесты выявили проблемы с ним.

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

Нет запасного кабеля для передачи данных жесткого диска? Вы можете купить его в любом магазине электроники или одолжить тот, который используется другим приводом, например, вашим оптическим приводом, при условии, конечно, что это тот же тип кабеля. В новых дисках используются кабели SATA, а в старых — кабели PATA.

Убедитесь, что вы приложили все усилия, чтобы выполнить шаги по устранению неполадок до этого. Шаги 14 и 15 включают в себя более сложные и разрушительные решения проблем с зависанием, остановкой и постоянной перезагрузкой во время запуска Windows. Может случиться так, что одно из приведенных ниже решений необходимо для решения вашей проблемы, но если вы до этого момента не проявляли усердия в устранении неполадок, вы не можете быть уверены, что одно из более простых решений выше не является правильным. один.

Протестируйте жесткий диск с помощью бесплатной программы тестирования жесткого диска. Физическая проблема с вашим жестким диском, безусловно, является причиной того, что Windows может постоянно перезагружаться, полностью зависать или останавливаться. Жесткий диск, который не может правильно читать и записывать информацию, определенно не сможет правильно загрузить операционную систему.

Замените жесткий диск, если тесты выявили проблему. После замены жесткого диска вам потребуется переустановить Windows.

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

Выполните чистую установку Windows. Этот тип установки полностью сотрет диск и снова установит Windows с нуля.

На шаге 3 мы советовали вам попытаться решить проблемы с запуском, вызванные Windows, путем восстановления Windows.Поскольку этот метод исправления важных файлов Windows является неразрушающим, убедитесь, что вы пробовали его до полностью разрушительной, крайней чистой установки на этом шаге.

Когда вы пытаетесь загрузить Windows 10 на свой компьютер, он просто зависает? Вы можете быть раздражены и разочарованы. Не беспокойтесь. Конечно, вы не одиноки. Многие пользователи Windows 10 также сталкиваются с этой проблемой. Что еще более важно, вы МОЖЕТЕ исправить это с помощью решений, представленных здесь. Читайте дальше и узнайте, как…

Как исправить зависание Windows 10 при запуске?

Здесь есть 5 решений, которые вы можете попробовать решить эту проблему. Возможно, вам не придется пробовать их все; просто продвигайтесь вниз по списку, пока не найдете тот, который работает.

ВАЖНО. Чтобы попробовать любое из этих решений, вам необходимо войти в Windows на проблемном компьютере. Если вы не можете войти в Windows, перезапустите ее в безопасном режиме, а затем попробуйте эти решения.

Способ 1: отключить быстрый запуск

1) Введите параметр питания в поле поиска в меню "Пуск", затем нажмите "Параметры питания и сна" в верхней части результатов.

2) Нажмите Дополнительные параметры питания.

3) Нажмите Выберите действие кнопки питания.

4) Нажмите Изменить настройки, которые в данный момент недоступны.

5) Снимите флажок Включить быстрый запуск (рекомендуется). Затем нажмите Сохранить изменения.

Перезагрузите Windows 10 в обычном режиме, чтобы проверить, удалось ли это.

Способ 2. Обновите драйверы устройства

Эта проблема также может быть вызвана устаревшим, неправильным или поврежденным системным драйвером. Вы должны убедиться, что все ваши устройства имеют правильный драйвер, и обновить те, которые не поддерживаются.

Если у вас нет времени, терпения или навыков работы с компьютером для обновления драйверов вручную, вы можете сделать это автоматически с помощью Driver Easy.

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

Вы можете автоматически обновлять драйверы с помощью БЕСПЛАТНОЙ или профессиональной версии Driver Easy. Но с Pro-версией это займет всего 2 клика (и вы получите полную поддержку и 30-дневную гарантию возврата денег):

    и установите Driver Easy.
  1. Запустите Driver Easy и нажмите кнопку "Сканировать сейчас". Затем Driver Easy просканирует ваш компьютер и обнаружит проблемные драйверы.
  2. Нажмите «Обновить все», чтобы автоматически загрузить и установить правильную версию всех драйверов, отсутствующих или устаревших в вашей системе (для этого требуется версия Pro — вам будет предложено обновиться, когда вы нажимаете «Обновить все»).
    Примечание: вы можете сделать это бесплатно, если хотите, но это частично вручную.
    4) Перезагрузите Windows 10 в обычном режиме, чтобы проверить, удалось ли это.
  3. Способ 3. Попробуйте отключить все, что подключено через USB

    Например, если вы подключаете USB-мышь, USB-адаптер или любые другие USB-устройства к компьютеру, попробуйте отключить их.

    Перезагрузите Windows 10 в обычном режиме, чтобы проверить, удалось ли это.

    Способ 4: отключить AppXSvc

    1) На клавиатуре одновременно нажмите клавишу с логотипом Windows и R, чтобы вызвать окно "Выполнить".

    2) Введите regedit и нажмите OK.

    3) Нажмите "Да", когда появится запрос контроля учетных записей.

    4) Перейдите в раздел HKEY_LOCAL_MACHINE > SYSTEM > ControlSet001 > Services.

    5) Щелкните AppXSvc. Затем дважды щелкните Пуск.

    6) Установите начальное значение 4. Затем нажмите OK.

    Перезагрузите Windows 10 в обычном режиме, чтобы проверить, удалось ли это.

    Способ 5. Сбросьте или переустановите Windows

    Если ничего не помогает, возможно, вам придется сбросить Windows или даже переустановить ее вместе.Мы все знаем, что переустановка удалит все данные на жестком диске, поэтому перед этим необходимо сделать резервную копию всех важных файлов.
    Однако с Reimage нет необходимости в длительном резервном копировании, телефонных звонках в службу поддержки или риске для ваших личных данных. Reimage может сбросить Windows до состояния, в котором она была только что установлена, не затрагивая стороннее программное обеспечение.
    Вот как это использовать:

    1) Загрузите и установите Reimage.

    2) Откройте Reimage и запустите бесплатное сканирование. Это может занять несколько минут.

    3) Вы увидите сводку обнаруженных проблем на своем ПК. Нажмите НАЧАТЬ РЕМОНТ, и все проблемы будут устранены автоматически. (Вам необходимо приобрести полную версию. Она поставляется с 60-дневной гарантией возврата денег, поэтому вы можете вернуть деньги в любое время, если Reimage не решит вашу проблему).

    Но относитесь к этим вариантам как к крайнему средству, потому что оба они занимают довольно много времени.

    Читайте также: