Apollo 10.0
自动驾驶开放平台
apollo::cyber::Rate类 参考

#include <rate.h>

apollo::cyber::Rate 的协作图:

Public 成员函数

 Rate (double frequency)
 
 Rate (uint64_t nanoseconds)
 
 Rate (const Duration &)
 
void Sleep ()
 
void Reset ()
 
Duration CycleTime () const
 
Duration ExpectedCycleTime () const
 

详细描述

在文件 rate.h26 行定义.

构造及析构函数说明

◆ Rate() [1/3]

apollo::cyber::Rate::Rate ( double  frequency)
explicit

在文件 rate.cc61 行定义.

62 : start_(Time::Now()),
63 expected_cycle_time_(1.0 / frequency),
64 actual_cycle_time_(0.0) {}
static Time Now()
get the current time.
Definition time.cc:57

◆ Rate() [2/3]

apollo::cyber::Rate::Rate ( uint64_t  nanoseconds)
explicit

在文件 rate.cc66 行定义.

67 : start_(Time::Now()),
68 expected_cycle_time_(static_cast<int64_t>(nanoseconds)),
69 actual_cycle_time_(0.0) {}

◆ Rate() [3/3]

apollo::cyber::Rate::Rate ( const Duration d)
explicit

在文件 rate.cc71 行定义.

72 : start_(Time::Now()), expected_cycle_time_(d), actual_cycle_time_(0.0) {}

成员函数说明

◆ CycleTime()

Duration apollo::cyber::Rate::CycleTime ( ) const

在文件 rate.cc111 行定义.

111{ return actual_cycle_time_; }

◆ ExpectedCycleTime()

Duration apollo::cyber::Rate::ExpectedCycleTime ( ) const
inline

在文件 rate.h34 行定义.

34{ return expected_cycle_time_; }

◆ Reset()

void apollo::cyber::Rate::Reset ( )

在文件 rate.cc109 行定义.

109{ start_ = Time::Now(); }

◆ Sleep()

void apollo::cyber::Rate::Sleep ( )

在文件 rate.cc74 行定义.

74 {
75 Time expected_end = start_ + expected_cycle_time_;
76
77 Time actual_end = Time::Now();
78
79 // detect backward jumps in time
80 if (actual_end < start_) {
81 AWARN << "Detect backward jumps in time";
82 expected_end = actual_end + expected_cycle_time_;
83 }
84
85 // calculate the time we'll sleep for
86 Duration sleep_time = expected_end - actual_end;
87
88 // set the actual amount of time the loop took in case the user wants to kNow
89 actual_cycle_time_ = actual_end - start_;
90
91 // make sure to reset our start time
92 start_ = expected_end;
93
94 // if we've taken too much time we won't sleep
95 if (sleep_time < Duration(0.0)) {
96 AWARN << "Detect forward jumps in time";
97 // if we've jumped forward in time, or the loop has taken more than a full
98 // extra cycle, reset our cycle
99 if (actual_end > expected_end + expected_cycle_time_) {
100 start_ = actual_end;
101 }
102 // return false to show that the desired rate was not met
103 return;
104 }
105
106 Time::SleepUntil(expected_end);
107}
Cyber has builtin time type Time.
Definition time.h:31
static void SleepUntil(const Time &time)
Sleep Until time.
Definition time.cc:112
#define AWARN
Definition log.h:43
std::chrono::microseconds Duration
Definition croutine.h:36

该类的文档由以下文件生成: