如何解决在Windows和Cygwin上具有1ms精度的重复计时器
我在C ++程序中每毫秒调用一个函数时遇到问题。
我有一个运行FreeRTOS的嵌入式项目,我想在其本地计算机上运行部件。为此,我使用了基于Posix线程构建的FreeRTOS模拟器。 FreeRTOS内部依赖于每毫秒(或其他可配置间隔)调用滴答处理程序的中断。模拟器使用itimers(setitimer)以规则的时间间隔生成信号,并使用信号处理程序将处理程序附加到信号上。但是后来我意识到,滴答处理程序的调用时间远远少于每毫秒。在一次又一次地简化程序之后,我意识到即使是这段代码
std::thread t([]() {
int i = 0;
while (true) {
std::this_thread::sleep_for(std::chrono::microseconds(1000));
if ((i++ % 100) == 0)
printf("tick\n");
}
});
t.detach();
while(true) {}
打印刻度比您期望的要少得多。 我知道睡眠功能通常不能保证在间隔时间过后就醒来,而大量的开销会导致睡眠时间缩短而引人注意的延迟。 我正在寻找一种实用的解决方案,以令人满意的精度模拟RTOS的操纵杆计时器。
顺便说一句,我的平台是Windows 10上的Cygwin。可能是在Linux发行版上的itimer实现更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。