17#ifndef CYBER_CROUTINE_CROUTINE_H_
18#define CYBER_CROUTINE_CROUTINE_H_
80 const std::string &
name()
const;
89 std::chrono::steady_clock::time_point
wake_time()
const;
102 std::chrono::steady_clock::time_point wake_time_ =
103 std::chrono::steady_clock::now();
108 std::shared_ptr<RoutineContext> context_;
110 std::atomic_flag lock_ = ATOMIC_FLAG_INIT;
111 std::atomic_flag updated_ = ATOMIC_FLAG_INIT;
113 bool force_stop_ =
false;
115 int processor_id_ = -1;
116 uint32_t priority_ = 0;
119 std::string group_name_;
121 static thread_local CRoutine *current_routine_;
122 static thread_local char *main_stack_;
127 routine->set_state(
state);
158 wake_time_ = std::chrono::steady_clock::now() + sleep_duration;
179 std::chrono::steady_clock::now() > wake_time_) {
185 if (!updated_.test_and_set(std::memory_order_release)) {
198 return !lock_.test_and_set(std::memory_order_acquire);
202 return lock_.clear(std::memory_order_release);
206 updated_.clear(std::memory_order_release);
void set_priority(uint32_t priority)
uint32_t priority() const
void set_group_name(const std::string &group_name)
void set_state(const RoutineState &state)
static CRoutine * GetCurrentRoutine()
static char ** GetMainStack()
void Sleep(const Duration &sleep_duration)
void set_processor_id(int processor_id)
const std::string & group_name()
RoutineState state() const
RoutineState UpdateState()
void set_name(const std::string &name)
std::chrono::steady_clock::time_point wake_time() const
RoutineContext * GetContext()
const std::string & name() const
static void SetMainContext(const std::shared_ptr< RoutineContext > &context)
std::function< void()> RoutineFunc
void SwapContext(char **src_sp, char **dest_sp)
std::chrono::microseconds Duration