如题
ros::Rate loop_rate(10);
loop_rate.sleep();
在ROS C++ 编写订阅者等功能包时,会用到以上两个函数
经过本人测试和查询,sleep()函数并不占用CPU时间,故如果想用定时器来记录程序执行时间,并不会把休眠的时间加进去(休眠其实就是不占用CPU时间的意思).
实际上,执行sleep()函数,只会占用CPU时间调用一条语句的时间.
如果想记录程序的总的运行时间(而不是占用CPU的时间),可以通过C 库函数 - time()来获取当前时间(C 库函数 time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中)
用C 库函数 double difftime(time_t time1, time_t time2) 返回 time1 和 time2 之间相差的秒数 (time1 - time2)。这两个时间是在日历时间中指定的,表示了自纪元 Epoch(协调世界时 UTC:1970-01-01 00:00:00)起经过的时间。
time_t start_t, end_t; double diff_t;
time(&start_t);
loop_rate.sleep();
time(&end_t);
diff_t = difftime(end_t, start_t);
cout << "diff_t = " << diff_t <<endl;
注意,应当把loop_rate(10) 改为loop_rate(1),这样就可以看到diff_t = 1的输出