我需要找到执行一段代码所需的时间,该方法应该独立于系统时间,即计时和所有不会工作。
我的usecse看起来有点像这样。
int main{
//start
function();
//end
time_take = end - start;
}
我在一个嵌入式平台上工作,启动时没有正确的时间。在我的情况下,函数的开始发生在从ntp服务器设置实际时间之前,结束发生在获得确切时间之后。因此,任何比较两点之间时间差的方法都不起作用。而且,CPU滴答数对我也不起作用,因为我的程序必须始终处于活动运行状态。
我试过传统的方法,但它们对我不起作用。
2条答案
按热度按时间tvmytwxo1#
在Linux上clock_gettime()有一个返回当前
CLOCK_MONOTONIC
的选项,它不受系统时间变化的影响。测量CLOCK_MONOTONIC
的开始和结束,然后用你自己的数学计算减去这两个值,将测量经过的时间,忽略任何系统时间变化。nlejzf6q2#
如果您不想深入了解C级抽象,
<chrono>
可以为您提供steady_clock
:steady_clock
通常是clock_gettime
的 Package 器,与CLOCK_MONOTONIC
一起使用,但可在所有平台上移植。即,一些平台没有clock_gettime
,但有一个API用于获取单调时钟时间。上面的
take_time
类型将是steady_clock::duration
。在我所知道的所有平台上,此类型是nanoseconds
的别名。如果您想要nanoseconds
的整数计数,您可以:上述方法适用于所有平台,即使
steady_clock::duration
不是nanoseconds
。<chrono>
相对于C级API的一个小优势是,你不必手动计算timespec
减法,当然,它是可移植的。