延迟方法调用特定时间

时间:2014-11-19 19:49:25

标签: c++ linux ros

我正在用c ++编写一个ros节点,需要在特定时间内延迟一个方法调用。 有什么好办法可以做到这一点,而不会为延迟锁定节点?

2 个答案:

答案 0 :(得分:3)

使用C ++方法,而在ROS中存在两种方法。

第一个 - 更简单的实现方法 - 是使用Rate类。 this tutorial的第2节阐明了如何使用它。但是你可以看到,这不是最好的选择。

  

注意:通常建议使用定时器而不是速率。

Timers是在做其他事情时等待一段时间的正确方法。 This simple tutorial解释了如何使用它们。

ros::Timer ros::NodeHandle::createTimer(ros::Duration period, <callback>, bool oneshot = false);

如果您只想执行一次该方法,请将oneshot bool变量设置为true。

答案 1 :(得分:1)

您有两种选择:

  1. 您有其他可以进展的线程或进程。简单地睡一下你的线程:

    std::this_thread::sleep_for(std::chrono::milliseconds(150));
    
  2. 您还需要在同一个线程上执行其他任务。查看异步执行,例如Boost Asio