Задержка вызова метода на определенное время

0

Я пишу узел ros с c++ и вам нужно задержать один вызов метода в определенное время. Каков хороший способ сделать это, не блокируя узел для этой задержки?

Теги:
ros

2 ответа

3
Лучший ответ

sehe использовал подход C++, вместо этого существуют два способа сделать это в ROS.

Первый - проще реализовать метод - это использовать класс Rate. В разделе 2 этого руководства разъясняется, как его использовать. Однако, как вы можете видеть, это не лучший выбор.

Примечание. Обычно рекомендуется использовать таймеры вместо Rate.

Timers - это правильный способ подождать некоторое время, выполняя другие действия. В этом простом учебнике объясняется, как их использовать.

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

В вашем случае, если вы хотите выполнить метод только один раз, установите для параметра oneshot bool значение true.

1

У вас есть два варианта:

  1. у вас есть другие потоки или процессы, которые могут прогрессировать. Просто скройте свою нить немного:

    std::this_thread::sleep_for(std::chrono::milliseconds(150));
    
  2. у вас есть другие задачи, которые необходимо продвигать в одном потоке. Посмотрите на асинхронное выполнение, например, с Boost Asio

Ещё вопросы

Сообщество Overcoder
Наверх
Меню