У меня есть программа, которая была встроена в C ++ (MFC, Visual Studio 6.0) несколько лет назад и работала на определенном компьютере с Windows довольно долгое время (более 5 лет). ПК был заменен месяц назад (старый умер), и с тех пор изменились временные характеристики программы. Мне нужна помощь, чтобы понять, почему.
Основная функция программы - реагировать на нажатия клавиш, посылая сигналы ВКЛ и ВЫКЛ на внешнюю карту, с очень точной задержкой между ВКЛ и ВЫКЛ. Пример выполнения программы:
> wait for keystroke...
> ! keystroke occurred
> send ON message
> wait 150ms
> send OFF message
С разными нажатиями клавиш связаны разные периоды ожидания, от 20 мс до 150 мс (очень детерминированное время, зависящее от конкретного нажатия клавиши). Время очень важно. Ожидание выполняется с использованием простого Sleep()
. Точность сна на старом ПК составляла отклонение 1-2 мс. Я могу измерить внешнее время на компьютере (на внешней карте), поэтому мое время сна очень точное. Пожалуйста, примите во внимание, что эта машина выполняла такие циклы ВКЛ-ВЫКЛ-ВЫКЛ тысячи раз в день в течение многих лет, поэтому у меня есть точные данные о точности.
Поскольку ПК был заменен, временное отклонение составляет более 10 мс.
Я не устанавливал предыдущий компьютер, поэтому на нем могут быть установлены дополнительные пакеты программного обеспечения. Кроме того, мне стыдно признаться, что я не помню, был ли предыдущий ПК Windows 2000 или Windows XP. Я совершенно уверен, что это была XP, но не 100% (и я не могу проверить сейчас ...). Новым является Windows XP.
Я пытался изменить спящий механизм на таймеры, но точность не улучшилась.
Может ли что-нибудь объяснить это изменение? Есть ли программный пакет, который мог быть установлен на предыдущем ПК, который может решить проблему? Есть ли лучшая практика для решения проблемы?