acl  3.5.3.0
acl_events.h 文件参考
#include "../stdlib/acl_define.h"
#include <time.h>
#include "../stdlib/acl_vstream.h"
#include "acl_timer.h"
+ acl_events.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

宏定义

#define ACL_EVENT_READ   (1 << 0)
 
#define ACL_EVENT_ACCEPT   (1 << 1)
 
#define ACL_EVENT_WRITE   (1 << 2)
 
#define ACL_EVENT_CONNECT   (1 << 3)
 
#define ACL_EVENT_XCPT   (1 << 4)
 
#define ACL_EVENT_TIME   (1 << 5)
 
#define ACL_EVENT_RW_TIMEOUT   (1 << 6)
 
#define ACL_EVENT_TIMEOUT   ACL_EVENT_RW_TIMEOUT
 
#define ACL_EVENT_FD_IDLE   0
 
#define ACL_EVENT_FD_BUSY   1
 
#define ACL_EVENT_ERROR   ACL_EVENT_XCPT
 
#define ACL_EVENT_SELECT   0
 
#define ACL_EVENT_POLL   1
 
#define ACL_EVENT_KERNEL   2
 
#define ACL_EVENT_WMSG   3
 
#define ACL_EVENT_NULL_TYPE   0
 
#define ACL_EVENT_NULL_CONTEXT   ((char *) 0)
 

类型定义

typedef struct ACL_EVENT ACL_EVENT
 
typedef struct ACL_EVENT_FDTABLE ACL_EVENT_FDTABLE
 
typedef void(* ACL_EVENT_NOTIFY_RDWR) (int event_type, ACL_EVENT *event, ACL_VSTREAM *stream, void *context)
 
typedef void(* ACL_EVENT_NOTIFY_TIME) (int event_type, ACL_EVENT *event, void *context)
 

函数

ACL_API ACL_EVENTacl_event_new (int event_mode, int use_thr, int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_select (int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_select_thr (int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_poll (int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_poll_thr (int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_kernel (int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_kernel_thr (int delay_sec, int delay_usec)
 
ACL_API ACL_EVENTacl_event_new_wmsg (unsigned int nMsg)
 
ACL_API void acl_event_add_dog (ACL_EVENT *eventp)
 
ACL_API void acl_event_set_fire_hook (ACL_EVENT *eventp, void(*fire_begin)(ACL_EVENT *, void *), void(*fire_end)(ACL_EVENT *, void *), void *ctx)
 
ACL_API void acl_event_set_check_inter (ACL_EVENT *eventp, int n)
 
ACL_API void acl_event_free (ACL_EVENT *eventp)
 
ACL_API acl_int64 acl_event_time (ACL_EVENT *eventp)
 
ACL_API void acl_event_drain (ACL_EVENT *eventp)
 
ACL_API void acl_event_enable_read (ACL_EVENT *eventp, ACL_VSTREAM *stream, int read_timeout, ACL_EVENT_NOTIFY_RDWR callback, void *context)
 
ACL_API void acl_event_enable_write (ACL_EVENT *eventp, ACL_VSTREAM *stream, int write_timeout, ACL_EVENT_NOTIFY_RDWR callback, void *context)
 
ACL_API void acl_event_enable_listen (ACL_EVENT *eventp, ACL_VSTREAM *stream, int read_timeout, ACL_EVENT_NOTIFY_RDWR callback, void *context)
 
ACL_API void acl_event_disable_read (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API void acl_event_disable_write (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API void acl_event_disable_readwrite (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API int acl_event_isset (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API int acl_event_isrset (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API int acl_event_iswset (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API int acl_event_isxset (ACL_EVENT *eventp, ACL_VSTREAM *stream)
 
ACL_API acl_int64 acl_event_request_timer (ACL_EVENT *eventp, ACL_EVENT_NOTIFY_TIME callback, void *context, acl_int64 delay, int keep)
 
ACL_API acl_int64 acl_event_cancel_timer (ACL_EVENT *eventp, ACL_EVENT_NOTIFY_TIME callback, void *context)
 
ACL_API void acl_event_keep_timer (ACL_EVENT *eventp, ACL_EVENT_NOTIFY_TIME callback, void *context, int onoff)
 
ACL_API int acl_event_timer_ifkeep (ACL_EVENT *eventp, ACL_EVENT_NOTIFY_TIME callback, void *context)
 
ACL_API void acl_event_loop (ACL_EVENT *eventp)
 
ACL_API void acl_event_set_delay_sec (ACL_EVENT *eventp, int sec)
 
ACL_API void acl_event_set_delay_usec (ACL_EVENT *eventp, int usec)
 
ACL_API int acl_event_get_delay_sec (ACL_EVENT *eventp)
 
ACL_API int acl_event_get_delay_usec (ACL_EVENT *eventp)
 
ACL_API int acl_event_use_thread (ACL_EVENT *eventp)
 
ACL_API int acl_event_mode (ACL_EVENT *eventp)
 
ACL_API int acl_event_last_nready (ACL_EVENT *eventp)
 

宏定义说明

◆ ACL_EVENT_ACCEPT

#define ACL_EVENT_ACCEPT   (1 << 1)

accept one connection

在文件 acl_events.h16 行定义.

◆ ACL_EVENT_CONNECT

#define ACL_EVENT_CONNECT   (1 << 3)

client has connected the server

在文件 acl_events.h18 行定义.

◆ ACL_EVENT_ERROR

#define ACL_EVENT_ERROR   ACL_EVENT_XCPT

在文件 acl_events.h27 行定义.

◆ ACL_EVENT_FD_BUSY

#define ACL_EVENT_FD_BUSY   1

在文件 acl_events.h25 行定义.

◆ ACL_EVENT_FD_IDLE

#define ACL_EVENT_FD_IDLE   0

在文件 acl_events.h24 行定义.

◆ ACL_EVENT_KERNEL

#define ACL_EVENT_KERNEL   2

在文件 acl_events.h31 行定义.

◆ ACL_EVENT_NULL_CONTEXT

#define ACL_EVENT_NULL_CONTEXT   ((char *) 0)

在文件 acl_events.h38 行定义.

◆ ACL_EVENT_NULL_TYPE

#define ACL_EVENT_NULL_TYPE   0

在文件 acl_events.h37 行定义.

◆ ACL_EVENT_POLL

#define ACL_EVENT_POLL   1

在文件 acl_events.h30 行定义.

◆ ACL_EVENT_READ

#define ACL_EVENT_READ   (1 << 0)

read event

在文件 acl_events.h15 行定义.

◆ ACL_EVENT_RW_TIMEOUT

#define ACL_EVENT_RW_TIMEOUT   (1 << 6)

read/write timeout event

在文件 acl_events.h21 行定义.

◆ ACL_EVENT_SELECT

#define ACL_EVENT_SELECT   0

在文件 acl_events.h29 行定义.

◆ ACL_EVENT_TIME

#define ACL_EVENT_TIME   (1 << 5)

timer event

在文件 acl_events.h20 行定义.

◆ ACL_EVENT_TIMEOUT

#define ACL_EVENT_TIMEOUT   ACL_EVENT_RW_TIMEOUT

在文件 acl_events.h22 行定义.

◆ ACL_EVENT_WMSG

#define ACL_EVENT_WMSG   3

在文件 acl_events.h32 行定义.

◆ ACL_EVENT_WRITE

#define ACL_EVENT_WRITE   (1 << 2)

write event

在文件 acl_events.h17 行定义.

◆ ACL_EVENT_XCPT

#define ACL_EVENT_XCPT   (1 << 4)

exception

在文件 acl_events.h19 行定义.

类型定义说明

◆ ACL_EVENT

typedef struct ACL_EVENT ACL_EVENT

在文件 acl_events.h43 行定义.

◆ ACL_EVENT_FDTABLE

在文件 acl_events.h44 行定义.

◆ ACL_EVENT_NOTIFY_RDWR

typedef void(* ACL_EVENT_NOTIFY_RDWR) (int event_type, ACL_EVENT *event, ACL_VSTREAM *stream, void *context)

在文件 acl_events.h54 行定义.

◆ ACL_EVENT_NOTIFY_TIME

typedef void(* ACL_EVENT_NOTIFY_TIME) (int event_type, ACL_EVENT *event, void *context)

在文件 acl_events.h56 行定义.

函数说明

◆ acl_event_add_dog()

ACL_API void acl_event_add_dog ( ACL_EVENT eventp)

为了防止在多线程模式下 select 等事件循环的时间等待,可以添加此项以中断等待, 加快事件循环过程

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空

◆ acl_event_cancel_timer()

ACL_API acl_int64 acl_event_cancel_timer ( ACL_EVENT eventp,
ACL_EVENT_NOTIFY_TIME  callback,
void *  context 
)

取消一个定时事件

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
callback{ACL_EVENT_NOTIFY_TIME} 定时事件的回调函数
context{void*} callback 所需要的回调参数
返回
acl_int64 {acl_int64} 距离开始执行事件函数的时间间隔, 以微秒为单位

◆ acl_event_disable_read()

ACL_API void acl_event_disable_read ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

将数据流从事件的读监听流集合中清除

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_disable_readwrite()

ACL_API void acl_event_disable_readwrite ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

将数据流从事件的读写监听流集合中清除

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_disable_write()

ACL_API void acl_event_disable_write ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

将数据流从事件的写监听流集合中清除

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_drain()

ACL_API void acl_event_drain ( ACL_EVENT eventp)

将事件中的所有任务执行完毕

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空

◆ acl_event_enable_listen()

ACL_API void acl_event_enable_listen ( ACL_EVENT eventp,
ACL_VSTREAM stream,
int  read_timeout,
ACL_EVENT_NOTIFY_RDWR  callback,
void *  context 
)

设置监听套接口(指有新连接到达/被系统中断/出错时)的回调函数

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的
read_timeout{int} 监听超时时间(秒),可以为0
callback{ACL_EVENT_NOTIFY_RDWR} 数据流可读时的回调函数
context{void*} 回调函数 callback 所需要的参数

◆ acl_event_enable_read()

ACL_API void acl_event_enable_read ( ACL_EVENT eventp,
ACL_VSTREAM stream,
int  read_timeout,
ACL_EVENT_NOTIFY_RDWR  callback,
void *  context 
)

设置数据流可读时(指有数据待读或描述符出错或描述符关闭)的回调函数

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的
read_timeout{int} 读超时时间(秒)
callback{ACL_EVENT_NOTIFY_RDWR} 数据流可读时的回调函数
context{void*} 回调函数 callback 所需要的参数

◆ acl_event_enable_write()

ACL_API void acl_event_enable_write ( ACL_EVENT eventp,
ACL_VSTREAM stream,
int  write_timeout,
ACL_EVENT_NOTIFY_RDWR  callback,
void *  context 
)

设置数据流可写时(指有空间可以写或描述符出错或描述符关闭)的回调函数

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的
write_timeout{int} 写超时时间(秒)
callback{ACL_EVENT_NOTIFY_RDWR} 数据流可写时的回调函数
context{void*} 回调函数 callback 所需要的参数

◆ acl_event_free()

ACL_API void acl_event_free ( ACL_EVENT eventp)

释放事件结构

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空

◆ acl_event_get_delay_sec()

ACL_API int acl_event_get_delay_sec ( ACL_EVENT eventp)

获得事件循环的空闲休息时间中的秒级数值

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
返回
{int} 秒级空闲休息时间值

◆ acl_event_get_delay_usec()

ACL_API int acl_event_get_delay_usec ( ACL_EVENT eventp)

获得事件循环的空闲休息时间中的微秒级数值

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
返回
{int} 微秒级空闲休息时间值

◆ acl_event_isrset()

ACL_API int acl_event_isrset ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

检查流中的描述符是否已经置入读事件的集合中

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_isset()

ACL_API int acl_event_isset ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

检查流中的描述符是否已经置入读、写或异常事件的集合中

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_iswset()

ACL_API int acl_event_iswset ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

检查流中的描述符是否已经置入写事件的集合中

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_isxset()

ACL_API int acl_event_isxset ( ACL_EVENT eventp,
ACL_VSTREAM stream 
)

检查流中的描述符是否已经置入异常事件的集合中

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
stream{ACL_VSTREAM*} 数据流指针, 不能为空, 且其中的描述符必须是有效的

◆ acl_event_keep_timer()

ACL_API void acl_event_keep_timer ( ACL_EVENT eventp,
ACL_EVENT_NOTIFY_TIME  callback,
void *  context,
int  onoff 
)

当定时器处理完毕后,是否需要再次设置该定时器,以方便调用者循环 使用该定时器

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
callback{ACL_EVENT_NOTIFY_TIME} 非空
context{void*} 附属于 callback 的变量
onoff{int} 是否重复通过 acl_event_request_timer 设置的定时器

◆ acl_event_last_nready()

ACL_API int acl_event_last_nready ( ACL_EVENT eventp)

获得本次事件循环后被触发的 IO 事件的次数

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
返回
{int} 该值为本次循环被触发的事件次数

◆ acl_event_loop()

ACL_API void acl_event_loop ( ACL_EVENT eventp)

事件循环执行的调度函数

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空

◆ acl_event_mode()

ACL_API int acl_event_mode ( ACL_EVENT eventp)

获得当前事件引擎的事件模型

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
返回
{int} ACL_EVENT_SELECT/ACL_EVENT_KERNEL/ACL_EVENT_POLL

◆ acl_event_new()

ACL_API ACL_EVENT* acl_event_new ( int  event_mode,
int  use_thr,
int  delay_sec,
int  delay_usec 
)

创建一个事件循环对象的总入口,此函数会根据用户参数的不同自动调用下面的事件对象创建函数

参数
event_mode{int} 事件处理方式,目前仅支持: ACL_EVENT_SELECT, ACL_EVENT_KERNEL, ACL_EVENT_POLL, ACL_EVENT_WMSG
use_thr{int} 是否采用线程事件方式,非0表示按线程事件方式
delay_sec{int} 事件循环等待时的最长秒数,当 event_mode 为 ACL_EVENT_WMSG 时,且该值大于 0 时,则该值被当作消息值对待传给 acl_event_new_wmsg,用来与异 步消息句柄绑定
delay_usec{int} 事件循环等待时的最长微秒数(仅 select 方式有用)
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_kernel()

ACL_API ACL_EVENT* acl_event_new_kernel ( int  delay_sec,
int  delay_usec 
)

创建一个新的事件对象, 该事件采用效率高的 epoll/devpoll/kqueue 方式,且不支持多线程

参数
delay_sec{int} 在调用事件循环函数时休息的秒数
delay_usec{int} 在调用事件循环函数时休息的微秒数(忽略不计)
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_kernel_thr()

ACL_API ACL_EVENT* acl_event_new_kernel_thr ( int  delay_sec,
int  delay_usec 
)

创建一个新的事件对象, 该事件采用效率高的 epoll/devpoll/kqueue 方式,且采用线程方式

参数
delay_sec{int} 在调用事件循环函数时休息的秒数
delay_usec{int} 在调用事件循环函数时休息的微秒数(忽略不计)
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_poll()

ACL_API ACL_EVENT* acl_event_new_poll ( int  delay_sec,
int  delay_usec 
)

创建一个支持 poll 的事件对象,不支持多线程

参数
delay_sec{int} 在调用 poll() 函数时休息的秒数
delay_usec{int} 在调用 poll() 函数时休息的微秒数
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_poll_thr()

ACL_API ACL_EVENT* acl_event_new_poll_thr ( int  delay_sec,
int  delay_usec 
)

创建一个支持 poll 的事件对象,支持多线程

参数
delay_sec{int} 在调用 poll() 函数时休息的秒数
delay_usec{int} 在调用 poll() 函数时休息的微秒数
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_select()

ACL_API ACL_EVENT* acl_event_new_select ( int  delay_sec,
int  delay_usec 
)

创建一个新的事件对象, 该事件不支持多线程

参数
delay_sec{int} 在调用 select() 函数时休息的秒数
delay_usec{int} 在调用 select() 函数时休息的微秒数
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_select_thr()

ACL_API ACL_EVENT* acl_event_new_select_thr ( int  delay_sec,
int  delay_usec 
)

创建一个新的事件对象, 该事件支持线程模式

参数
delay_sec{int} 在调用 select() 函数时休息的秒数
delay_usec{int} 在调用 select() 函数时休息的微秒数
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_new_wmsg()

ACL_API ACL_EVENT* acl_event_new_wmsg ( unsigned int  nMsg)

创建一个能与 Windows 界面消息绑在一起的事件引擎对象

参数
nMsg{unsigned int} 如果该值大于 0 则将该异步句柄与该消息值绑定, 否则将该异步句柄与缺省的消息值绑定
返回
{ACL_EVENT*} 事件对象指针,如果为空表示出错

◆ acl_event_request_timer()

ACL_API acl_int64 acl_event_request_timer ( ACL_EVENT eventp,
ACL_EVENT_NOTIFY_TIME  callback,
void *  context,
acl_int64  delay,
int  keep 
)

添加一个定时事件

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
callback{ACL_EVENT_NOTIFY_TIME} 定时事件的回调函数
context{void*} callback 所需要的回调参数
delay{acl_int64} eventp->event_present + delay 为该事件函数开始执行的时间 单位为微秒
keep{int} 是否重复定时器任务
返回
{acl_int64} 事件执行的时间截,单位为微秒

◆ acl_event_set_check_inter()

ACL_API void acl_event_set_check_inter ( ACL_EVENT eventp,
int  n 
)

设置事件循环过程中定时检查所有描述字状态的时间间隔,内部缺省值为 100 ms

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
n{int} 定时查检时间间隔 (毫秒级)

◆ acl_event_set_delay_sec()

ACL_API void acl_event_set_delay_sec ( ACL_EVENT eventp,
int  sec 
)

设置事件循环的空闲休息时间中的秒级数值

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
sec{int} 秒级空闲休息时间值

◆ acl_event_set_delay_usec()

ACL_API void acl_event_set_delay_usec ( ACL_EVENT eventp,
int  usec 
)

设置事件循环的空闲休息时间中的微秒级数值

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
usec{int} 微秒级空闲休息时间值

◆ acl_event_set_fire_hook()

ACL_API void acl_event_set_fire_hook ( ACL_EVENT eventp,
void(*)(ACL_EVENT *, void *)  fire_begin,
void(*)(ACL_EVENT *, void *)  fire_end,
void *  ctx 
)

设置事件触发的前置和后置处理过程

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
fire_begin{void (*)(ACL_EVENT*, void*)} 当事件被统一触发前的回调过程
fire_end{void (*)(ACL_EVENT*, void*)} 当事件被统一触发后的回调过程
ctx{void*} fire_begin / fire_end 的第二个参数

◆ acl_event_time()

ACL_API acl_int64 acl_event_time ( ACL_EVENT eventp)

返回事件的时间截

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
返回
{acl_int64} 当前事件的时间截(微秒级别)

◆ acl_event_timer_ifkeep()

ACL_API int acl_event_timer_ifkeep ( ACL_EVENT eventp,
ACL_EVENT_NOTIFY_TIME  callback,
void *  context 
)

判断所设置的定时器都处于重复使用状态

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
callback{ACL_EVENT_NOTIFY_TIME} 非空
context{void*} 附属于 callback 的变量
返回
{int} !0 表示所设置的定时器都处于重复使用状态

◆ acl_event_use_thread()

ACL_API int acl_event_use_thread ( ACL_EVENT eventp)

是否采用线程事件方式

参数
eventp{ACL_EVENT*} 事件对象指针, 不为能为空
返回
{int} 0: 否; !=0: 是