如题
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的输出
本文探讨了在ROS C++编程中如何使用`Ratelooop_rate`和`sleep()`函数来实现定时任务,并解释了`sleep()`函数并不占用CPU时间的原理。通过C库函数`time()`和`difftime()`可以准确测量程序的总运行时间,而非CPU占用时间。示例代码展示了如何利用这些函数来计算程序执行时间间隔。
3319

被折叠的 条评论
为什么被折叠?



