XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
事件标志 的协作图:

模块

 事件标志触发条件枚举
 
 事件标志触发后操作枚举
 

结构体

struct  xwos_flg
 XWOS API:事件标志对象 更多...
 
struct  xwos_flg_d
 XWOS API:事件标志对象描述符 更多...
 

宏定义

#define XWOS_FLG_NILD   ((xwos_flg_d){NULL, 0,})
 XWOS API:空的事件标志对象描述符
 

函数

static xwer_t xwos_flg_init (struct xwos_flg *flg, xwsz_t num, xwbmp_t *bmp, xwbmp_t *msk)
 XWOS API:静态方式初始化事件标志对象
 
static xwer_t xwos_flg_fini (struct xwos_flg *flg)
 XWOS API:销毁静态方式初始化的事件标志对象
 
static xwer_t xwos_flg_grab (struct xwos_flg *flg)
 XWOS API:增加事件标志对象的引用计数
 
static xwer_t xwos_flg_put (struct xwos_flg *flg)
 XWOS API:减少事件标志对象的引用计数
 
static xwer_t xwos_flg_create (xwos_flg_d *flgd, xwsz_t num)
 XWOS API:动态方式创建事件标志对象
 
static xwer_t xwos_flg_delete (xwos_flg_d flgd)
 XWOS API:删除动态方式创建的事件标志对象
 
static xwer_t xwos_flg_acquire (xwos_flg_d flgd)
 XWOS API:检查事件标志对象的标签并增加引用计数
 
static xwer_t xwos_flg_release (xwos_flg_d flgd)
 XWOS API:检查事件标志对象的标签并减少引用计数
 
static xwsq_t xwos_flg_get_tik (struct xwos_flg *flg)
 XWOS API:获取事件标志对象的标签
 
static xwos_flg_d xwos_flg_get_d (struct xwos_flg *flg)
 XWOS API:获取事件标志对象描述符
 
static xwer_t xwos_flg_bind (struct xwos_flg *flg, struct xwos_sel *sel, xwsq_t pos)
 XWOS API:绑定事件标志对象到信号选择器
 
static xwer_t xwos_flg_unbind (struct xwos_flg *flg, struct xwos_sel *sel)
 XWOS API:从信号选择器上解绑事件标志对象
 
static xwer_t xwos_flg_get_num (struct xwos_flg *flg, xwsz_t *numbuf)
 XWOS API:获取事件标志中事件槽的数量
 
static xwer_t xwos_flg_s1m (struct xwos_flg *flg, xwbmp_t msk[])
 XWOS API:同时设置多个事件标志位
 
static xwer_t xwos_flg_s1i (struct xwos_flg *flg, xwsq_t pos)
 XWOS API:设置单个事件标志位
 
static xwer_t xwos_flg_c0m (struct xwos_flg *flg, xwbmp_t msk[])
 XWOS API:同时清除多个事件标志位
 
static xwer_t xwos_flg_c0i (struct xwos_flg *flg, xwsq_t pos)
 XWOS API:清除单个事件标志位
 
static xwer_t xwos_flg_x1m (struct xwos_flg *flg, xwbmp_t msk[])
 XWOS API:同时翻转多个事件标志位
 
static xwer_t xwos_flg_x1i (struct xwos_flg *flg, xwsq_t pos)
 XWOS API:翻转单个事件标志位
 
static xwer_t xwos_flg_read (struct xwos_flg *flg, xwbmp_t out[])
 XWOS API:读取事件标志位图的值
 
static xwer_t xwos_flg_wait (struct xwos_flg *flg, xwsq_t trigger, xwsq_t action, xwbmp_t origin[], xwbmp_t msk[])
 XWOS API:等待事件
 
static xwer_t xwos_flg_wait_to (struct xwos_flg *flg, xwsq_t trigger, xwsq_t action, xwbmp_t origin[], xwbmp_t msk[], xwtm_t to)
 XWOS API:限时等待触发事件
 
static xwer_t xwos_flg_trywait (struct xwos_flg *flg, xwsq_t trigger, xwsq_t action, xwbmp_t origin[], xwbmp_t msk[])
 XWOS API:检查触发事件
 

详细描述

技术参考手册: 事件标志

事件标志的静态初始化、销毁

事件标志的动态创建、删除

产生事件

获取事件的状态

等待事件

使用信号选择器选择事件标志

事件标志对象的生命周期管理

对象描述符和对象标签

已知事件标志对象的指针的情况下,可以通过 xwos_flg_get_d() 获取 xwos_flg_d , 或可以通过 xwos_flg_get_tik() 获取对象标签。

C++

C++头文件: xwos/osal/sync/flg.hxx

宏定义说明

◆ XWOS_FLG_NILD

#define XWOS_FLG_NILD   ((xwos_flg_d){NULL, 0,})

XWOS API:空的事件标志对象描述符

在文件 flg.h108 行定义.

函数说明

◆ xwos_flg_acquire()

static xwer_t xwos_flg_acquire ( xwos_flg_d  flgd)
inlinestatic

XWOS API:检查事件标志对象的标签并增加引用计数

参数
[in]flgd事件标志对象描述符
返回
错误码
返回值
XWOK没有错误
-ENILOBJD空的对象描述符
-EOBJDEAD对象无效
-EACCES对象标签检查失败
注解
  • 上下文:任意

在文件 flg.h285 行定义.

286{
287 return xwosdl_flg_acquire(&flgd.flg->osflg, flgd.tik);
288}
xwsq_t tik
Definition flg.h:102
struct xwos_flg * flg
Definition flg.h:101
struct xwmp_evt osflg
Definition flg.h:94

◆ xwos_flg_bind()

static xwer_t xwos_flg_bind ( struct xwos_flg flg,
struct xwos_sel sel,
xwsq_t  pos 
)
inlinestatic

XWOS API:绑定事件标志对象到信号选择器

参数
[in]flg事件标志对象的指针
[in]sel信号选择器的指针
[in]pos事件标志对象映射到位图中的位置
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-ECHRNG位置超出范围
-EALREADY同步对象已经绑定到事件对象
-EBUSY通道已经被其他同步对象独占
注解
  • 上下文:任意
  • 绑定方式:非独占绑定

在文件 flg.h353 行定义.

354{
355 return xwosdl_flg_bind(&flg->osflg, &sel->ossel, pos);
356}
struct xwmp_evt ossel
Definition sel.h:82

◆ xwos_flg_c0i()

static xwer_t xwos_flg_c0i ( struct xwos_flg flg,
xwsq_t  pos 
)
inlinestatic

XWOS API:清除单个事件标志位

参数
[in]flg事件标志对象指针
[in]pos事件的序号
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-ECHRNG位置超出范围
注解
  • 上下文:任意

此方法会将事件标志位图中,序号为 pos 的单个位清 0

此函数除了会修改事件标志位图的状态,还会通过 广播 唤醒所有正在等待的线程。 然后,线程通过比对位图状态,确定事件是否已经满足触发条件。 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 flg.h476 行定义.

477{
478 return xwosdl_flg_c0i(&flg->osflg, pos);
479}

◆ xwos_flg_c0m()

static xwer_t xwos_flg_c0m ( struct xwos_flg flg,
xwbmp_t  msk[] 
)
inlinestatic

XWOS API:同时清除多个事件标志位

参数
[in]flg事件标志对象指针
[in]msk事件的位图掩码
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

此方法会将事件标志位图中,被掩码 msk 覆盖的位全部清 0

此函数除了会修改事件标志位图的状态,还会通过 广播 唤醒所有正在等待的线程。 然后,线程通过比对位图状态,确定事件是否已经满足触发条件。 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 flg.h453 行定义.

454{
455 return xwosdl_flg_c0m(&flg->osflg, msk);
456}

◆ xwos_flg_create()

static xwer_t xwos_flg_create ( xwos_flg_d flgd,
xwsz_t  num 
)
inlinestatic

XWOS API:动态方式创建事件标志对象

参数
[out]flgd指向缓冲区的指针,通过此缓冲区返回事件标志对象描述符
[in]num线程栅栏中的线程数量
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-ENOMEM内存不足
注解
  • 上下文:任意

在文件 flg.h253 行定义.

254{
255 return xwosdl_flg_create((xwosdl_flg_d *)flgd, num);
256}

◆ xwos_flg_delete()

static xwer_t xwos_flg_delete ( xwos_flg_d  flgd)
inlinestatic

XWOS API:删除动态方式创建的事件标志对象

参数
[in]flgd事件标志对象描述符
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

在文件 flg.h268 行定义.

269{
270 return xwosdl_flg_delete(&flgd.flg->osflg, flgd.tik);
271}

◆ xwos_flg_fini()

static xwer_t xwos_flg_fini ( struct xwos_flg flg)
inlinestatic

XWOS API:销毁静态方式初始化的事件标志对象

参数
[in]flg事件标志对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

在文件 flg.h198 行定义.

199{
200 return xwosdl_flg_fini(&flg->osflg);
201}

◆ xwos_flg_get_d()

static xwos_flg_d xwos_flg_get_d ( struct xwos_flg flg)
inlinestatic

XWOS API:获取事件标志对象描述符

参数
[in]flg事件标志对象的指针
返回
事件标志对象描述符
注解
  • 上下文:任意

在文件 flg.h328 行定义.

329{
330 xwos_flg_d flgd;
331
332 flgd.flg = flg;
333 flgd.tik = xwosdl_flg_get_tik(&flg->osflg);
334 return flgd;
335}
XWOS API:事件标志对象描述符
Definition flg.h:100

◆ xwos_flg_get_num()

static xwer_t xwos_flg_get_num ( struct xwos_flg flg,
xwsz_t numbuf 
)
inlinestatic

XWOS API:获取事件标志中事件槽的数量

参数
[in]flg事件标志对象的指针
[out]numbuf指向缓冲区的指针,通过此缓冲区返回事件槽的数量
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
注解
  • 上下文:任意

在文件 flg.h386 行定义.

387{
388 return xwosdl_flg_get_num(&flg->osflg, numbuf);
389}

◆ xwos_flg_get_tik()

static xwsq_t xwos_flg_get_tik ( struct xwos_flg flg)
inlinestatic

XWOS API:获取事件标志对象的标签

参数
[in]flg事件标志对象的指针
返回
事件标志对象的标签
注解
  • 上下文:任意

在文件 flg.h315 行定义.

316{
317 return xwosdl_flg_get_tik(&flg->osflg);
318}

◆ xwos_flg_grab()

static xwer_t xwos_flg_grab ( struct xwos_flg flg)
inlinestatic

XWOS API:增加事件标志对象的引用计数

参数
[in]flg事件标志对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOBJDEAD对象无效
注解
  • 上下文:任意

此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。

在文件 flg.h217 行定义.

218{
219 return xwosdl_flg_grab(&flg->osflg);
220}

◆ xwos_flg_init()

static xwer_t xwos_flg_init ( struct xwos_flg flg,
xwsz_t  num,
xwbmp_t bmp,
xwbmp_t msk 
)
inlinestatic

XWOS API:静态方式初始化事件标志对象

参数
[in]flg事件标志对象的指针
[in]num事件标志中的事件数量
[in]bmp事件标志用来记录事件状态的位图缓冲区
[in]msk事件标志用来记录事件掩码的位图缓冲区
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

在文件 flg.h182 行定义.

184{
185 return xwosdl_flg_init(&flg->osflg, num, bmp, msk);
186}

◆ xwos_flg_put()

static xwer_t xwos_flg_put ( struct xwos_flg flg)
inlinestatic

XWOS API:减少事件标志对象的引用计数

参数
[in]flg事件标志对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOBJDEAD对象无效
注解
  • 上下文:任意

此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。

在文件 flg.h236 行定义.

237{
238 return xwosdl_flg_put(&flg->osflg);
239}

◆ xwos_flg_read()

static xwer_t xwos_flg_read ( struct xwos_flg flg,
xwbmp_t  out[] 
)
inlinestatic

XWOS API:读取事件标志位图的值

参数
[in]flg事件标志对象指针
[out]out指向缓冲区的指针,通过此缓冲区返回事件标志对象位图的值
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

在文件 flg.h537 行定义.

538{
539 return xwosdl_flg_read(&flg->osflg, out);
540}

◆ xwos_flg_release()

static xwer_t xwos_flg_release ( xwos_flg_d  flgd)
inlinestatic

XWOS API:检查事件标志对象的标签并减少引用计数

参数
[in]flgd事件标志对象描述符
返回
错误码
返回值
XWOK没有错误
-ENILOBJD空的对象描述符
-EOBJDEAD对象无效
-EACCES对象标签检查失败
注解
  • 上下文:任意

在文件 flg.h302 行定义.

303{
304 return xwosdl_flg_release(&flgd.flg->osflg, flgd.tik);
305}

◆ xwos_flg_s1i()

static xwer_t xwos_flg_s1i ( struct xwos_flg flg,
xwsq_t  pos 
)
inlinestatic

XWOS API:设置单个事件标志位

参数
[in]flg事件标志对象指针
[in]pos事件的序号
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-ECHRNG位置超出范围
注解
  • 上下文:任意

此方法会将事件标志位图中,序号为 pos 的单个位设置为 1

此函数除了会修改事件标志位图的状态,还会通过 广播 唤醒所有正在等待的线程。 然后,线程通过比对位图状态,确定事件是否已经满足触发条件。 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 flg.h431 行定义.

432{
433 return xwosdl_flg_s1i(&flg->osflg, pos);
434}

◆ xwos_flg_s1m()

static xwer_t xwos_flg_s1m ( struct xwos_flg flg,
xwbmp_t  msk[] 
)
inlinestatic

XWOS API:同时设置多个事件标志位

参数
[in]flg事件标志对象指针
[in]msk事件标志对象的位图掩码
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

此方法会将事件标志位图中,被掩码 msk 覆盖的位全部设置为 1

此函数除了会修改事件标志位图的状态,还会通过 广播 唤醒所有正在等待的线程。 然后,线程通过比对位图状态,确定事件是否已经满足触发条件。 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 flg.h408 行定义.

409{
410 return xwosdl_flg_s1m(&flg->osflg, msk);
411}

◆ xwos_flg_trywait()

static xwer_t xwos_flg_trywait ( struct xwos_flg flg,
xwsq_t  trigger,
xwsq_t  action,
xwbmp_t  origin[],
xwbmp_t  msk[] 
)
inlinestatic

XWOS API:检查触发事件

参数
[in]flg事件标志对象指针
[in]trigger事件触发条件,取值:
[in]action事件触发后的动作,
[in,out]origin指向缓冲区的指针:
  • trigger电平触发
    • (O) 返回事件发生时的位图的状态
  • 当trigger为 边沿触发
    • (I) 作为输入时,作为比较的初始状态
    • (O) 作为输出时,返回触发后的事件位图状态(常作为下一次调用的初始值)
[in]msk事件的位图掩码,表示只关注掩码部分的事件
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-ENODATA没有任何事件触发
注解
  • 上下文:任意
  • 当检测到事件,立即返回 XWOK
  • 当没有检测到事件,立即返回 -ENODATA

在文件 flg.h673 行定义.

675{
676 return xwosdl_flg_trywait(&flg->osflg, trigger, action, origin, msk);
677}

◆ xwos_flg_unbind()

static xwer_t xwos_flg_unbind ( struct xwos_flg flg,
struct xwos_sel sel 
)
inlinestatic

XWOS API:从信号选择器上解绑事件标志对象

参数
[in]flg事件标志对象的指针
[in]sel信号选择器的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-ENOTCONN同步对象没有绑定到事件对象上
注解
  • 上下文:任意

在文件 flg.h370 行定义.

371{
372 return xwosdl_flg_unbind(&flg->osflg, &sel->ossel);
373}

◆ xwos_flg_wait()

static xwer_t xwos_flg_wait ( struct xwos_flg flg,
xwsq_t  trigger,
xwsq_t  action,
xwbmp_t  origin[],
xwbmp_t  msk[] 
)
inlinestatic

XWOS API:等待事件

参数
[in]flg事件标志对象指针
[in]trigger事件触发条件,取值:
[in]action事件触发后的动作,
[in,out]origin指向缓冲区的指针:
  • trigger电平触发
    • (O) 返回事件发生时的位图的状态
  • 当trigger为 边沿触发
    • (I) 作为输入时,作为比较的初始状态
    • (O) 作为输出时,返回触发后的事件位图状态(常作为下一次调用的初始值)
[in]msk事件的位图掩码,表示只关注掩码部分的事件
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程
  • 当没有检测到事件时,线程会阻塞等待。
  • 当检测到事件时,线程被唤醒,然后返回 XWOK
  • 当线程阻塞等待被中断时,返回 -EINTR

在文件 flg.h580 行定义.

582{
583 return xwosdl_flg_wait(&flg->osflg, trigger, action, origin, msk);
584}

◆ xwos_flg_wait_to()

static xwer_t xwos_flg_wait_to ( struct xwos_flg flg,
xwsq_t  trigger,
xwsq_t  action,
xwbmp_t  origin[],
xwbmp_t  msk[],
xwtm_t  to 
)
inlinestatic

XWOS API:限时等待触发事件

参数
[in]flg事件标志对象指针
[in]trigger事件触发条件,取值:
[in]action事件触发后的动作,
[in,out]origin指向缓冲区的指针:
  • trigger电平触发
    • (O) 返回事件发生时的位图的状态
  • 当trigger为 边沿触发
    • (I) 作为输入时,作为比较的初始状态
    • (O) 作为输出时,返回触发后的事件位图状态(常作为下一次调用的初始值)
[in]msk事件的位图掩码,表示只关注掩码部分的事件
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-ETIMEDOUT超时
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程
  • 当检测到事件,线程被唤醒,然后返回 XWOK
  • 当没有检测到事件,线程会阻塞等待,等待时会指定一个唤醒时间点 toto 表示等待超时的时间点:
    • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
    • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT
  • 当线程阻塞等待被中断时,返回 -EINTR

在文件 flg.h630 行定义.

633{
634 return xwosdl_flg_wait_to(&flg->osflg, trigger, action, origin, msk, to);
635}

◆ xwos_flg_x1i()

static xwer_t xwos_flg_x1i ( struct xwos_flg flg,
xwsq_t  pos 
)
inlinestatic

XWOS API:翻转单个事件标志位

参数
[in]flg事件标志对象指针
[in]pos事件的序号
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-ECHRNG位置超出范围
注解
  • 上下文:任意

此方法会将事件标志位图中,序号为 pos 的单个位翻转。

此函数除了会修改事件标志位图的状态,还会通过 广播 唤醒所有正在等待的线程。 然后,线程通过比对位图状态,确定事件是否已经满足触发条件。 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 flg.h521 行定义.

522{
523 return xwosdl_flg_x1i(&flg->osflg, pos);
524}

◆ xwos_flg_x1m()

static xwer_t xwos_flg_x1m ( struct xwos_flg flg,
xwbmp_t  msk[] 
)
inlinestatic

XWOS API:同时翻转多个事件标志位

参数
[in]flg事件标志对象指针
[in]msk事件的位图掩码
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

此方法会将事件标志位图中,被掩码 msk 覆盖的位全部翻转。

此函数除了会修改事件标志位图的状态,还会通过 广播 唤醒所有正在等待的线程。 然后,线程通过比对位图状态,确定事件是否已经满足触发条件。 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 flg.h498 行定义.

499{
500 return xwosdl_flg_x1m(&flg->osflg, msk);
501}