2024-12-15 21:49:26 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
#include "coctx.h"
|
|
|
|
|
#include <functional>
|
|
|
|
|
namespace tinyrpc {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Coroutine {
|
2024-12-17 15:47:10 +08:00
|
|
|
|
friend void coFunction(Coroutine* co);
|
2024-12-15 21:49:26 +08:00
|
|
|
|
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);
|
2024-12-15 21:49:26 +08:00
|
|
|
|
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();
|
2024-12-15 21:49:26 +08:00
|
|
|
|
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 {}; // 这个协程的回调
|
2024-12-15 21:49:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|