我有一个几年前用 C++(MFC、Visual Studio 6.0)构建的程序,并且已经在某台 Windows 机器上运行了相当长的一段时间(超过 5 年)。PC 在一个月前被更换(旧的已经死了),从那时起程序的计时行为发生了变化。我需要帮助理解为什么。
该程序的主要功能是通过向外部卡发送 ON 和 OFF 信号来响应击键,在 ON 和 OFF 之间具有非常准确的延迟。一个示例程序流程:
> wait for keystroke...
> ! keystroke occurred
> send ON message
> wait 150ms
> send OFF message
不同的击键有不同的等待时间,在 20 毫秒到 150 毫秒之间(取决于特定的击键,这是一个非常确定的时间)。时机非常重要。使用 simple 执行等待Sleep()
。老电脑上休眠的准确度有1-2ms的偏差。我可以在计算机外部(在外部卡上)测量时间,所以我对睡眠时间的测量非常准确。请考虑到这台机器多年来每天执行数千次这样的 ON-sleep-OFF 循环,所以我拥有的准确度数据是合理的。
由于更换了PC,时间偏差超过10ms。
我没有安装以前的PC,所以它可能安装了一些额外的软件包。另外,我很惭愧地承认我不记得以前的 PC 是 Windows 2000 还是 Windows XP。我很确定这是 XP,但不是 100%(我现在无法检查......)。新的是Windows XP。
我尝试将睡眠机制更改为基于计时器,但准确性并没有提高。
有什么可以解释这种变化吗?是否有可能已安装在以前的 PC 上的软件包可以解决问题?是否有解决问题的最佳实践?