38 lines
1.1 KiB
C++
38 lines
1.1 KiB
C++
#pragma once
|
||
#include "coctx.h"
|
||
#include <functional>
|
||
namespace tinyrpc {
|
||
|
||
|
||
class Coroutine {
|
||
friend void coFunction(Coroutine* co);
|
||
private:
|
||
Coroutine();
|
||
public:
|
||
// 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;}
|
||
|
||
void operator()() const { // 调用 这个协程的回调
|
||
m_callback();
|
||
}
|
||
|
||
bool isMainCoroutine() const {return m_stack_sp == nullptr;}
|
||
|
||
// coctx* getContext() {return &m_ctx;}
|
||
|
||
static void yeild(); // 挂起当前的协程
|
||
void resume(); // 恢复 this 的运行
|
||
|
||
~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 完成时为假。
|
||
std::function<void()> m_callback {}; // 这个协程的回调
|
||
};
|
||
|
||
|
||
} |