SC_MONITORPOWER запускает фоновые задачи - PullRequest
0 голосов
/ 21 марта 2020

Сводка

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

Полная история

Для аппаратного устройства с сенсорным экраном мне нужно иметь возможность отключить сенсорный экран, когда он не используется, из соображений долговечности. Windows имеет сообщение, которое вы можете отправить, чтобы отключить его, SC_MONITORPOWER. Более конкретно: SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

Это работает нормально, но когда экран выключен, Windows, по-видимому, иногда выполняет некоторые задачи, которые он не выполняет, когда экран включен. Мы стараемся никогда ничего не записывать на экран в этой ситуации (это вызывает огромные проблемы, когда экран выключен, на самом деле, просто мигающий курсор в окне DOS использует половину ядра, когда экран выключен).

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

Таким образом, очевидно, что мы что-то упустили, когда выключили все службы и задачи. Кажется, есть две причины икоты:

  • Одна происходит каждые 10-30 часов или около того (не уверен в точном времени, похоже, что он меняется). Но это всегда происходит 5 раз, с ТОЧНО 5 минутами (максимум несколько миллисекунд) между перерывами (так что в целом это происходит 5 раз за 25 минут).
  • Кроме того, мы получаем один сбой, как правило, каждые 4-10 часов, но время между событиями не кажется слишком постоянным, поэтому также может быть несколько причин.

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

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

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

Система Intel i5-8700 с 6 ядрами, Windows LTSB, дополнительное программное обеспечение не установлено, кроме нашего собственного.

1 Ответ

0 голосов
/ 24 марта 2020

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

  • sihost.exe
  • igfxEM.exe (я очень подозреваю, что это)
  • RuntimeBroker.exe
  • dllhost.exe
  • taskhostw.exe
  • explorer.exe

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

...