在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 (将#修改为@)