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

#include <croutine.h>

apollo::cyber::croutine::CRoutine 的协作图:

Public 成员函数

 CRoutine (const RoutineFunc &func)
 
virtual ~CRoutine ()
 
bool Acquire ()
 
void Release ()
 
void SetUpdateFlag ()
 
RoutineState Resume ()
 
RoutineState UpdateState ()
 
RoutineContextGetContext ()
 
char ** GetStack ()
 
void Run ()
 
void Stop ()
 
void Wake ()
 
void HangUp ()
 
void Sleep (const Duration &sleep_duration)
 
RoutineState state () const
 
void set_state (const RoutineState &state)
 
uint64_t id () const
 
void set_id (uint64_t id)
 
const std::string & name () const
 
void set_name (const std::string &name)
 
int processor_id () const
 
void set_processor_id (int processor_id)
 
uint32_t priority () const
 
void set_priority (uint32_t priority)
 
std::chrono::steady_clock::time_point wake_time () const
 
void set_group_name (const std::string &group_name)
 
const std::string & group_name ()
 

静态 Public 成员函数

static void Yield ()
 
static void Yield (const RoutineState &state)
 
static void SetMainContext (const std::shared_ptr< RoutineContext > &context)
 
static CRoutineGetCurrentRoutine ()
 
static char ** GetMainStack ()
 

详细描述

在文件 croutine.h40 行定义.

构造及析构函数说明

◆ CRoutine()

apollo::cyber::croutine::CRoutine::CRoutine ( const RoutineFunc func)
explicit

在文件 croutine.cc45 行定义.

45 : func_(func) {
46 std::call_once(pool_init_flag, [&]() {
47 uint32_t routine_num = common::GlobalData::Instance()->ComponentNums();
48 auto &global_conf = common::GlobalData::Instance()->Config();
49 if (global_conf.has_scheduler_conf() &&
50 global_conf.scheduler_conf().has_routine_num()) {
51 routine_num =
52 std::max(routine_num, global_conf.scheduler_conf().routine_num());
53 }
54 context_pool.reset(new base::CCObjectPool<RoutineContext>(routine_num));
55 });
56
57 context_ = context_pool->GetObject();
58 if (context_ == nullptr) {
59 AWARN << "Maximum routine context number exceeded! Please check "
60 "[routine_num] in config file.";
61 context_.reset(new RoutineContext());
62 }
63
64 MakeContext(CRoutineEntry, this, context_.get());
65 state_ = RoutineState::READY;
66 updated_.test_and_set(std::memory_order_release);
67}
#define AWARN
Definition log.h:43
void MakeContext(const func &f1, const void *arg, RoutineContext *ctx)

◆ ~CRoutine()

apollo::cyber::croutine::CRoutine::~CRoutine ( )
virtual

在文件 croutine.cc69 行定义.

69{ context_ = nullptr; }

成员函数说明

◆ Acquire()

bool apollo::cyber::croutine::CRoutine::Acquire ( )
inline

在文件 croutine.h197 行定义.

197 {
198 return !lock_.test_and_set(std::memory_order_acquire);
199}

◆ GetContext()

RoutineContext * apollo::cyber::croutine::CRoutine::GetContext ( )
inline

在文件 croutine.h139 行定义.

139{ return context_.get(); }

◆ GetCurrentRoutine()

CRoutine * apollo::cyber::croutine::CRoutine::GetCurrentRoutine ( )
inlinestatic

在文件 croutine.h135 行定义.

135{ return current_routine_; }

◆ GetMainStack()

char ** apollo::cyber::croutine::CRoutine::GetMainStack ( )
inlinestatic

在文件 croutine.h137 行定义.

137{ return &main_stack_; }

◆ GetStack()

char ** apollo::cyber::croutine::CRoutine::GetStack ( )
inline

在文件 croutine.h141 行定义.

141{ return &(context_->sp); }

◆ group_name()

const std::string & apollo::cyber::croutine::CRoutine::group_name ( )
inline

在文件 croutine.h95 行定义.

95{ return group_name_; }

◆ HangUp()

void apollo::cyber::croutine::CRoutine::HangUp ( )
inline

◆ id()

uint64_t apollo::cyber::croutine::CRoutine::id ( ) const
inline

在文件 croutine.h162 行定义.

162{ return id_; }

◆ name()

const std::string & apollo::cyber::croutine::CRoutine::name ( ) const
inline

在文件 croutine.h166 行定义.

166{ return name_; }

◆ priority()

uint32_t apollo::cyber::croutine::CRoutine::priority ( ) const
inline

在文件 croutine.h193 行定义.

193{ return priority_; }

◆ processor_id()

int apollo::cyber::croutine::CRoutine::processor_id ( ) const
inline

在文件 croutine.h170 行定义.

170{ return processor_id_; }

◆ Release()

void apollo::cyber::croutine::CRoutine::Release ( )
inline

在文件 croutine.h201 行定义.

201 {
202 return lock_.clear(std::memory_order_release);
203}

◆ Resume()

RoutineState apollo::cyber::croutine::CRoutine::Resume ( )

在文件 croutine.cc71 行定义.

71 {
72 if (cyber_unlikely(force_stop_)) {
74 return state_;
75 }
76
77 if (cyber_unlikely(state_ != RoutineState::READY)) {
78 AERROR << "Invalid Routine State!";
79 return state_;
80 }
81
82 current_routine_ = this;
84 current_routine_ = nullptr;
85 return state_;
86}
#define cyber_unlikely(x)
Definition macros.h:30
#define AERROR
Definition log.h:44
void SwapContext(char **src_sp, char **dest_sp)

◆ Run()

void apollo::cyber::croutine::CRoutine::Run ( )
inline

在文件 croutine.h143 行定义.

143{ func_(); }

◆ set_group_name()

void apollo::cyber::croutine::CRoutine::set_group_name ( const std::string &  group_name)
inline

在文件 croutine.h91 行定义.

91 {
92 group_name_ = group_name;
93 }
const std::string & group_name()
Definition croutine.h:95

◆ set_id()

void apollo::cyber::croutine::CRoutine::set_id ( uint64_t  id)
inline

在文件 croutine.h164 行定义.

164{ id_ = id; }

◆ set_name()

void apollo::cyber::croutine::CRoutine::set_name ( const std::string &  name)
inline

在文件 croutine.h168 行定义.

168{ name_ = name; }
const std::string & name() const
Definition croutine.h:166

◆ set_priority()

void apollo::cyber::croutine::CRoutine::set_priority ( uint32_t  priority)
inline

在文件 croutine.h195 行定义.

195{ priority_ = priority; }

◆ set_processor_id()

void apollo::cyber::croutine::CRoutine::set_processor_id ( int  processor_id)
inline

在文件 croutine.h172 行定义.

172 {
173 processor_id_ = processor_id;
174}

◆ set_state()

void apollo::cyber::croutine::CRoutine::set_state ( const RoutineState state)
inline

在文件 croutine.h145 行定义.

145{ state_ = state; }
RoutineState state() const
Definition croutine.h:147

◆ SetMainContext()

static void apollo::cyber::croutine::CRoutine::SetMainContext ( const std::shared_ptr< RoutineContext > &  context)
static

◆ SetUpdateFlag()

void apollo::cyber::croutine::CRoutine::SetUpdateFlag ( )
inline

在文件 croutine.h205 行定义.

205 {
206 updated_.clear(std::memory_order_release);
207}

◆ Sleep()

void apollo::cyber::croutine::CRoutine::Sleep ( const Duration sleep_duration)
inline

在文件 croutine.h157 行定义.

157 {
158 wake_time_ = std::chrono::steady_clock::now() + sleep_duration;
160}

◆ state()

RoutineState apollo::cyber::croutine::CRoutine::state ( ) const
inline

在文件 croutine.h147 行定义.

147{ return state_; }

◆ Stop()

void apollo::cyber::croutine::CRoutine::Stop ( )

在文件 croutine.cc88 行定义.

88{ force_stop_ = true; }

◆ UpdateState()

RoutineState apollo::cyber::croutine::CRoutine::UpdateState ( )
inline

在文件 croutine.h176 行定义.

176 {
177 // Synchronous Event Mechanism
178 if (state_ == RoutineState::SLEEP &&
179 std::chrono::steady_clock::now() > wake_time_) {
180 state_ = RoutineState::READY;
181 return state_;
182 }
183
184 // Asynchronous Event Mechanism
185 if (!updated_.test_and_set(std::memory_order_release)) {
186 if (state_ == RoutineState::DATA_WAIT || state_ == RoutineState::IO_WAIT) {
187 state_ = RoutineState::READY;
188 }
189 }
190 return state_;
191}

◆ Wake()

void apollo::cyber::croutine::CRoutine::Wake ( )
inline

在文件 croutine.h153 行定义.

153{ state_ = RoutineState::READY; }

◆ wake_time()

std::chrono::steady_clock::time_point apollo::cyber::croutine::CRoutine::wake_time ( ) const
inline

在文件 croutine.h149 行定义.

149 {
150 return wake_time_;
151}

◆ Yield() [1/2]

void apollo::cyber::croutine::CRoutine::Yield ( )
inlinestatic

在文件 croutine.h131 行定义.

131 {
133}
static CRoutine * GetCurrentRoutine()
Definition croutine.h:135

◆ Yield() [2/2]

void apollo::cyber::croutine::CRoutine::Yield ( const RoutineState state)
inlinestatic

在文件 croutine.h125 行定义.

125 {
126 auto routine = GetCurrentRoutine();
127 routine->set_state(state);
129}

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