没有做到定时器2在定时器1执行完毕之后才开始执行
时间: 2023-07-18 17:49:27 浏览: 80
如果你需要定时器2在定时器1执行完毕之后才开始执行,可以在定时器1的回调函数中启动定时器2。具体实现方法如下:
```c++
#include <ros/ros.h>
void timer1Callback(const ros::TimerEvent& event)
{
// 这个回调函数会在定时器1到期时执行一次
ROS_INFO("Timer 1 has expired.");
// 定时器2每600秒执行一次,不延迟执行
ros::NodeHandle nh;
ros::Timer timer2 = nh.createTimer(ros::Duration(600), timer2Callback);
}
void timer2Callback(const ros::TimerEvent& event)
{
// 这个回调函数会在定时器2到期时执行一次
ROS_INFO("Timer 2 has expired.");
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "timer_example_node");
ros::NodeHandle nh;
// 定时器1只执行一次,延迟1秒后执行
ros::Timer timer1 = nh.createTimer(ros::Duration(1), timer1Callback, true);
// 进入ROS循环
ros::spin();
return 0;
}
```
在这个例子中,我们在定时器1的回调函数中创建了定时器2,并且没有设置定时器2的自启动。这样,在定时器1执行完毕之后,定时器2就会开始计时,然后每600秒执行一次。注意,在这个例子中,定时器2的回调函数必须是全局函数或静态成员函数,否则无法作为回调函数使用。