代码中两个点之间的时间与系统时钟无关CPP Linux

3bygqnnd  于 2022-11-22  发布在  Linux
关注(0)|答案(2)|浏览(119)

我需要找到执行一段代码所需的时间,该方法应该独立于系统时间,即计时和所有不会工作。
我的usecse看起来有点像这样。

int main{
   //start
   function();
   //end
   time_take = end - start;
}

我在一个嵌入式平台上工作,启动时没有正确的时间。在我的情况下,函数的开始发生在从ntp服务器设置实际时间之前,结束发生在获得确切时间之后。因此,任何比较两点之间时间差的方法都不起作用。而且,CPU滴答数对我也不起作用,因为我的程序必须始终处于活动运行状态。
我试过传统的方法,但它们对我不起作用。

tvmytwxo

tvmytwxo1#

在Linux上clock_gettime()有一个返回当前CLOCK_MONOTONIC的选项,它不受系统时间变化的影响。测量CLOCK_MONOTONIC的开始和结束,然后用你自己的数学计算减去这两个值,将测量经过的时间,忽略任何系统时间变化。

nlejzf6q

nlejzf6q2#

如果您不想深入了解C级抽象,<chrono>可以为您提供steady_clock

int main{
   //start
   auto t0 = std::chrono::steady_clock::now();
   function();
   auto t1 = std::chrono::steady_clock::now();
   //end
   auto time_take = end - start;
}

steady_clock通常是clock_gettime的 Package 器,与CLOCK_MONOTONIC一起使用,但可在所有平台上移植。即,一些平台没有clock_gettime,但有一个API用于获取单调时钟时间。
上面的take_time类型将是steady_clock::duration。在我所知道的所有平台上,此类型是nanoseconds的别名。如果您想要nanoseconds的整数计数,您可以:

using namespace std::literals;
int64_t i = time_take/1ns;

上述方法适用于所有平台,即使steady_clock::duration不是nanoseconds
<chrono>相对于C级API的一个小优势是,你不必手动计算timespec减法,当然,它是可移植的。

相关问题