diff --git a/rclcpp/include/rclcpp/rate.hpp b/rclcpp/include/rclcpp/rate.hpp index 5a2e6a1..4fe225e 100644 --- a/rclcpp/include/rclcpp/rate.hpp +++ b/rclcpp/include/rclcpp/rate.hpp @@ -21,6 +21,7 @@ #include #include +#include namespace rclcpp { @@ -37,18 +38,23 @@ public: virtual void reset() = 0; }; +using std::chrono::duration; +using std::chrono::duration_cast; +using std::chrono::nanoseconds; + template class GenericRate : public RateBase { public: RCLCPP_MAKE_SHARED_DEFINITIONS(GenericRate); - GenericRate(double rate) : rate_(rate), last_interval_(Clock::now()) - { - typedef std::chrono::nanoseconds nanoseconds; - auto tmp = std::chrono::duration(1.0f/rate_); - period_ = std::chrono::duration_cast(tmp); - } + GenericRate(double rate) + : GenericRate( + duration_cast(duration(1.0/rate))) + {} + GenericRate(std::chrono::nanoseconds period) + : period_(period), last_interval_(Clock::now()) + {} virtual bool sleep() @@ -80,8 +86,8 @@ public: // Either way do not sleep and return false return false; } - // Sleep - std::this_thread::sleep_for(time_to_sleep); + // Sleep (will get interrupted by ctrl-c, may not sleep full time) + rclcpp::utilities::sleep_for(time_to_sleep); return true; } @@ -100,7 +106,6 @@ public: private: RCLCPP_DISABLE_COPY(GenericRate); - double rate_; std::chrono::nanoseconds period_; std::chrono::time_point last_interval_;