Сводка
При переводе монитора в спящий режим в 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, дополнительное программное обеспечение не установлено, кроме нашего собственного.