# 事件管理
TIP
- MadEvent.h
- MadEvent.c
TIP
“事件”与“信号”、“消息队列”不同,当某个“事件”触发时,将激活等待该事件的所有线程。
| 类型 | 约定描述 |
|---|---|
| MadEventCB_t | 事件控制块 |
| MadEventCB_t* | 事件 |
| MadEventCB_t** | 事件指针 |
# MadOS 事件触发类型
| 类型 | 说明 |
|---|---|
| MEMODE_WAIT_ALL | 全部条件满足才触发事件 |
| MEMODE_WAIT_ONE | 单一条件满足即触发事件 |
# MadOS 事件操作模式
当产生触发条件但没有线程等待事件时:
| 模式 | 说明 |
|---|---|
| MEOPT_DIRECT | 该事件将被抛弃 |
| MEOPT_DELAY | 该事件将被保持 |
# madEventCreate
MadEventCB_t* madEventCreate(MadUint mask, MadEventMode mode, MadEventOpt opt)
1
新建事件。
| 参数名 | 方向 | 说明 |
|---|---|---|
| mask | in | 事件触发掩码 |
| mode | in | 事件触发类型 |
| opt | in | 事件操作模式 |
| 返回值 | 说明 |
|---|---|
| 0 | 失败 |
| NZ | 成功(指向事件控制块的指针) |
# madEventWait
MadU8 madEventWait(MadEventCB_t **pEvent, MadUint *mask, MadTim_t to)
1
等待事件。
| 参数名 | 方向 | 说明 |
|---|---|---|
| pEvent | in | 事件指针 |
| mask | out | 接收事件当前掩码 |
| to | in | 等待超时的时间值(0则无时限) |
| 返回值 | 说明 |
|---|---|
| MAD_ERR_x | 错误代码 |
| MAD_ERR_OK | 事件触发 |
# madEventDoCheck
MadU8 madEventDoCheck(MadEventCB_t **pEvent, MadUint *mask, MadBool clear)
1
检查事件当前掩码。
| 参数名 | 方向 | 说明 |
|---|---|---|
| pEvent | in | 事件指针 |
| mask | out | 接收事件当前掩码 |
| clear | in | 是否清除当前掩码 |
| 返回值 | 说明 |
|---|---|
| MAD_ERR_x | 错误代码 |
| MAD_ERR_OK | 事件触发 |
# madDoEventTrigger
void madDoEventTrigger(MadEventCB_t **pEvent, MadUint mask, MadU8 err)
1
以mask为掩码值激活事件掩码。
| 参数名 | 方向 | 说明 |
|---|---|---|
| pEvent | in | 事件指针 |
| mask | in | 激活掩码 |
| err | in | 激活错误代码(通常为MAD_ERR_OK) |
# madDoEventShut
void madDoEventShut(MadEventCB_t **pEvent, MadBool opt)
1
终止事件(但不释放控制块所占用的内存)。
| 参数名 | 方向 | 说明 |
|---|---|---|
| pEvent | in | 事件指针 |
| opt | in | 是否恢复等待线程 |
opt
| 值 | 说明 |
|---|---|
| MTRUE | 以 MAD_ERR_EVENT_INVALID 为 err 释放信号量(恢复所有等待线程) |
| MFALSE | 忽略所有等待线程 |
# madDoEventDelete
void madDoEventDelete(MadEventCB_t **pEvent, MadBool opt)
1
删除事件。
| 参数名 | 方向 | 说明 |
|---|---|---|
| pEvent | in | 事件指针 |
| opt | in | 是否恢复等待线程 |
opt
| 值 | 说明 |
|---|---|
| MTRUE | 以 MAD_ERR_EVENT_INVALID 为 err 释放信号量(恢复所有等待线程) |
| MFALSE | 忽略所有等待线程 |
# madEventWaitNR(pEvent, to)
MadU8 madEventWait(MadEventCB_t **pEvent, MadUint *mask, MadTim_t to)
1
| 参数 | 值 |
|---|---|
| mask | MNULL |
# madEventCheck(pEvent, mask)
MadU8 madEventDoCheck(MadEventCB_t **pEvent, MadUint *mask, MadBool clear)
1
| 参数 | 值 |
|---|---|
| clear | MTRUE |
# madEventCheckNC(pEvent, mask)
MadU8 madEventDoCheck(MadEventCB_t **pEvent, MadUint *mask, MadBool clear)
1
| 参数 | 值 |
|---|---|
| clear | MFALSE |
# madEventClear(pEvent)
MadU8 madEventDoCheck(MadEventCB_t **pEvent, MadUint *mask, MadBool clear)
1
| 参数 | 值 |
|---|---|
| mask | MNULL |
| clear | MTRUE |
# madEventTrigger(pEvent, mask)
void madDoEventTrigger(MadEventCB_t **pEvent, MadUint mask, MadU8 err)
1
| 参数 | 值 |
|---|---|
| err | MAD_ERR_OK |
# madEventShut(pEvent)
void madDoEventShut(MadEventCB_t **pEvent, MadBool opt)
1
| 参数 | 值 |
|---|---|
| opt | MTRUE |
# madEventDelete(pEvent)
void madDoEventDelete(MadEventCB_t **pEvent, MadBool opt)
1
| 参数 | 值 |
|---|---|
| opt | MTRUE |