tinyrpc/includes/coroutine/coroutine.hpp

38 lines
1002 B
C++
Raw Normal View History

#pragma once
#include "coctx.h"
#include <functional>
namespace tinyrpc {
class Coroutine {
2024-12-17 15:47:10 +08:00
friend void coFunction(Coroutine* co);
private:
Coroutine();
public:
2024-12-17 15:47:10 +08:00
Coroutine(std::size_t stack_size, char* stack_sp);
Coroutine(std::size_t stack_size, char* stack_sp, std::function<void()> cb);
int getCorID() const {return m_cor_id;}
2024-12-17 15:47:10 +08:00
void operator()() const {
m_callback();
}
// coctx* getContext() {return &m_ctx;}
static void yeild();
void resume();
~Coroutine();
private:
coctx m_ctx {}; // 这个协程的上下文信息
int m_cor_id {0}; // 这个协程的 id
char* m_stack_sp {nullptr}; // 这个协程的栈空间指针
std::size_t m_stack_size {0};
bool m_is_in_cofunc {true}; // 调用 CoFunction 时为真CoFunction 完成时为假。
2024-12-17 15:47:10 +08:00
std::function<void()> m_callback {}; // 这个协程的回调
};
}