acl  3.5.3.0
acl::fiber类 参考

#include <fiber.hpp>

+ acl::fiber 的协作图:

Public 成员函数

 fiber (bool running=false)
 
virtual ~fiber (void)
 
void start (size_t stack_size=320000)
 
bool kill (void)
 
bool killed (void) const
 
unsigned int get_id (void) const
 
int get_errno (void) const
 
void set_errno (int errnum)
 
ACL_FIBERget_fiber (void) const
 

静态 Public 成员函数

static bool self_killed (void)
 
static unsigned int self (void)
 
static const char * last_serror (void)
 
static int last_error (void)
 
static const char * strerror (int errnum, char *buf, size_t size)
 
static void stdout_open (bool on)
 
static void init (fiber_event_t type, bool schedule_auto=false)
 
static void schedule (void)
 
static void schedule_with (fiber_event_t type)
 
static bool scheduled (void)
 
static void schedule_stop (void)
 
static void yield (void)
 
static void switch_to_next (void)
 
static void ready (fiber &f)
 
static unsigned int delay (unsigned int milliseconds)
 
static unsigned alive_number (void)
 
static unsigned dead_number (void)
 
static void hook_api (bool on)
 
static void acl_io_hook (void)
 
static void acl_io_unlock (void)
 
static bool winapi_hook (void)
 
static int get_sys_errno (void)
 
static void set_sys_errno (int errnum)
 
static void fiber_create (void(*fn)(ACL_FIBER *, void *), void *ctx, size_t size)
 

Protected 成员函数

virtual void run (void)
 

详细描述

协程类定义,纯虚类,需要子类继承并实现纯虚方法

在文件 fiber.hpp20 行定义.

构造及析构函数说明

◆ fiber()

acl::fiber::fiber ( bool  running = false)

构造函数

参数
running{bool} 当为 true 时,则表示当前协程已启动,仅是声明 了一个协程对象而已,以便于与 ACL_FIBER 对象绑定,此时禁止调用本对 象的 start 方法启动新协程; 当为 false 时,则需要调用 start 方法来 启动新协程

◆ ~fiber()

virtual acl::fiber::~fiber ( void  )
virtual

成员函数说明

◆ acl_io_hook()

static void acl::fiber::acl_io_hook ( void  )
static

显式调用本函数使 acl 基础库的 IO 过程协程化,在 UNIX 平台下不必显式 调用本函数,因为内部会自动 HOOK IO API

◆ acl_io_unlock()

static void acl::fiber::acl_io_unlock ( void  )
static

调用本函数取消 acl基础库中的 IO 协程化

◆ alive_number()

static unsigned acl::fiber::alive_number ( void  )
static

获得处于存活状态的协程数量

返回
{unsigned}

◆ dead_number()

static unsigned acl::fiber::dead_number ( void  )
static

获得处于退出状态的协程对象数量

返回
{unsigned}

◆ delay()

static unsigned int acl::fiber::delay ( unsigned int  milliseconds)
static

使当前运行的协程休眠指定毫秒数

参数
milliseconds{unsigned int} 指定要休眠的毫秒数
返回
{unsigned int} 本协程休眠后再次被唤醒后剩余的毫秒数

◆ fiber_create()

static void acl::fiber::fiber_create ( void(*)(ACL_FIBER *, void *)  fn,
void *  ctx,
size_t  size 
)
static

底层调用 C API 创建协程

参数
fn{void (*)(ACL_FIBER*, void*)} 协程函数执行入口
ctx{void*} 传递给协程执行函数的参数
size{size_t} 协程栈大小

被这些函数引用 acl::go_fiber::operator >().

+ 这是这个函数的调用关系图:

◆ get_errno()

int acl::fiber::get_errno ( void  ) const

获得当前协程在执行某个系统 API 出错时的错误号 return {int}

◆ get_fiber()

ACL_FIBER* acl::fiber::get_fiber ( void  ) const

返回本协程对象对应的 C 语言的协程对象

返回
{ACL_FIBER* }

◆ get_id()

unsigned int acl::fiber::get_id ( void  ) const

获得本协程对象的 ID 号

返回
{unsigned int}

◆ get_sys_errno()

static int acl::fiber::get_sys_errno ( void  )
static

获得当前系统级错误号

返回
{int}

◆ hook_api()

static void acl::fiber::hook_api ( bool  on)
static

线程启动后调用此函数设置当前线程是否需要 hook 系统 API,内部缺省 会 hook 系统 API

参数
on{bool}

◆ init()

static void acl::fiber::init ( fiber_event_t  type,
bool  schedule_auto = false 
)
static

显式设置协程调度事件引擎类型,同时设置协程调度器为自启动模式,即当 创建协程后不必显式调用 schedule 或 schedule_with 来启动协程调度器

参数
type{fiber_event_t} 事件引擎类型,参见:FIBER_EVENT_T_XXX
schedule_auto{bool} 若为 true,则创建协程对象后并运行该协程 对象后不必显式调用 schedule/schedule_with 来启动所有的协程过程,内 部会自动启动协程调度器;否则,在创建并启动协程后,必须显式地调用 schedule 或 schedule_with 方式来启动协程调度器以运行所的协程过程; 内部缺省状态为 false

◆ kill()

bool acl::fiber::kill ( void  )

在本协程运行时调用此函数通知该协程退出

返回
{bool} 返回 false 表示本协程未启动或已经退出

◆ killed()

bool acl::fiber::killed ( void  ) const

判断当前协程是否被通知退出

返回
{bool} 本协程是否被通知退出

◆ last_error()

static int acl::fiber::last_error ( void  )
static

获得本次操作的出错号

返回
{int}

◆ last_serror()

static const char* acl::fiber::last_serror ( void  )
static

获得本次操作的出错信息

返回
{const char*}

◆ ready()

static void acl::fiber::ready ( fiber f)
static

将指定协程对象置入待运行队列中

参数
f{fiber&}

◆ run()

virtual void acl::fiber::run ( void  )
protectedvirtual

虚函数,子类须实现本函数,当通过调用 start 方法启动协程后,本 虚函数将会被调用,从而通知子类协程已启动; 如果在构造函数中的参数 running 为 true ,则 start 将被禁止调用,故本虚方法也不会被调用

◆ schedule()

static void acl::fiber::schedule ( void  )
static

启动协程运行的调度过程

◆ schedule_stop()

static void acl::fiber::schedule_stop ( void  )
static

停止协程调度过程

◆ schedule_with()

static void acl::fiber::schedule_with ( fiber_event_t  type)
static

启动协程调度时指定事件引擎类型,调用本方法等于同时调用了 schedule_init 及 schedule 两个方法

参数
type{fiber_event_t} 事件引擎类型,参见:FIBER_EVENT_T_XXX

◆ scheduled()

static bool acl::fiber::scheduled ( void  )
static

判断当前线程是否处于协程调度状态

返回
{bool}

◆ self()

static unsigned int acl::fiber::self ( void  )
static

获得当前运行的协程对象的 ID 号

返回
{unsigned int}

◆ self_killed()

static bool acl::fiber::self_killed ( void  )
static

判断当前正在运行的协程是否被通知退出,该方法与 killed 的区别为, killed 首先必须有 acl::fiber 对象依托,且该协程对象有可能正在运行, 也有可能被挂起,而 self_killed 不需要 acl::fiber 对象依托且一定表示 当前正在运行的协程

返回
{bool}

◆ set_errno()

void acl::fiber::set_errno ( int  errnum)

设置当前协程的错误号

参数
errnum{int}

◆ set_sys_errno()

static void acl::fiber::set_sys_errno ( int  errnum)
static

设置当前系统级错误号

参数
errnum{int}

◆ start()

void acl::fiber::start ( size_t  stack_size = 320000)

在创建一个协程类对象且构造参数 running 为 false 时,需要本函数启动 协程,然后子类的重载的 run 方法将被回调,如果 running 为 true 时, 则禁止调用 start 方法

参数
stack_size{size_t} 创建的协程对象的栈大小

◆ stdout_open()

static void acl::fiber::stdout_open ( bool  on)
static

将错误信息输出至标准输出

参数
on{bool} 为 true 时,内部出错信息将输出至标准输出

◆ strerror()

static const char* acl::fiber::strerror ( int  errnum,
char *  buf,
size_t  size 
)
static

将所给错误号转成描述信息

参数
errnum{int} 错误号
buf{char*} 存储结果
size{size_t} buf 空间大小
返回
{const char*} buf 地址

◆ switch_to_next()

static void acl::fiber::switch_to_next ( void  )
static

挂起当前协程,执行等待队列中的下一个协程

◆ winapi_hook()

static bool acl::fiber::winapi_hook ( void  )
static

Windows 平台下可以显式地调用此函数 Hook 一些与网络协程相关的系统 API

返回
{bool}

◆ yield()

static void acl::fiber::yield ( void  )
static

将当前正在运行的协程(即本协程) 挂起


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