c++ - 如何以精确的毫秒间隔运行C++函数

标签 c++ multithreading timer sleep milliseconds

我需要找到一种在精确的毫秒周期内触发C++函数执行的方法。

我需要播放一个循环并每40毫秒或更短的时间运行一个函数。但为简单起见,让我们保持40毫秒。
我尝试放置一个Sleep(40),但是该方法未在确切的时间点触发。

我只是想知道是否还有另一种同步 Action 的方法,然后在无尽的while循环中使用Sleep()。

我甚至尝试以最大速度播放一个循环(CPU达到20%)并测量系统时间差。经过40毫秒后触发 Action 。

在这两种情况下,我都遇到延迟,但最糟糕的情况是延迟总是不同的。

循环正在线程中运行。

我试图给该线程更大的优先级,但是没有成功。

附加信息

服务器正在Windows 7操作系统上运行。

最佳答案

您可以使用诸如timeGetTime之类的功能来跟踪时间:

void main()
{
    unsigned int last_call_time = timeGetTime();

    while(true)
    {
        do_something_else();

        unsigned int now_time = timeGetTime();
        if(now_time > (last_call_time + 40))
        {
            call_time_critical_function();
            last_call_time = timeGetTime();//last time is re initialized
        }
    }
}
timeGetTime是标准的Windows函数,以毫秒为单位跟踪时间。如果该函数不够精确,则必须使用可以跟踪纳秒的函数(例如QueryPerformanceCounter),并且在网络上有很多有关如何使用此函数的示例。

关于c++ - 如何以精确的毫秒间隔运行C++函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19895434/

相关文章:

javascript - Javascript 中的秒表比正常时间慢

c++ - 如何在不完全 boost 的情况下使用 boost.xpressive ?

c++ - 对 unordered_map 的奇怪行为感到震惊

c# - 如何在 WinForms 中创建线程?

c# - 线程非常快地获得 100% CPU

timer - Erlang 中的 Cron 实现

c++ - 在 Turbo C++ 3.0 中读取文本文件

c++ - 当其文件夹为只读且文件不是时,文件属性为只读

c++ - 值得产生一个新线程的最小工作量

java - 如何停止该线程内的线程/计时器?