XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwos::sync::Flg< TNum > 模板类 参考

事件标志基类 更多...

#include <Flg.hxx>

类 xwos::sync::Flg< TNum > 继承关系图:
xwos::sync::Flg< TNum > 的协作图:

Public 类型

enum  Trigger : xwu32_t {
  FlgSetAll = XWOS_FLG_TRIGGER_SET_ALL , FlgSetAny = XWOS_FLG_TRIGGER_SET_ANY , FlgClearAll = XWOS_FLG_TRIGGER_CLR_ALL , FlgClearAny = XWOS_FLG_TRIGGER_CLR_ANY ,
  FlgToggleAll = XWOS_FLG_TRIGGER_TGL_ALL , FlgToggleAny = XWOS_FLG_TRIGGER_TGL_ANY
}
 触发条件枚举 更多...
 
enum  WaitMode : xwu32_t { FlgWait = 0 , FlgWaitTimed , FlgWaitUninterruptable , FlgTryWait }
 等待模式枚举 更多...
 

Public 成员函数

xwsz_t num ()
 获取事件的最大数量
 
void read (xwos::Bmp< TNum > *out)
 读取事件标志位图的值
 
xwer_t set (xwos::Bmp< TNum > *msk)
 同时设置多个事件标志位
 
xwer_t set (xwos::Bmp< TNum > &msk)
 
xwer_t set (unsigned long pos)
 
xwer_t set (long pos)
 
xwer_t clear (xwos::Bmp< TNum > *msk)
 同时清除多个事件标志位
 
xwer_t clear (xwos::Bmp< TNum > &msk)
 
xwer_t clear (unsigned long pos)
 
xwer_t clear (long pos)
 
xwer_t toggle (xwos::Bmp< TNum > *msk)
 同时翻转多个事件标志位
 
xwer_t toggle (xwos::Bmp< TNum > &msk)
 
xwer_t toggle (unsigned long pos)
 
xwer_t toggle (long pos)
 
xwer_t wait (enum Trigger trigger, bool consumption, xwos::Bmp< TNum > *origin, xwos::Bmp< TNum > *msk, enum WaitMode mode=WaitMode::FlgWait, xwtm_t to=((xwtm_t)((~(xwu64_t) 0) > > 1)))
 等待事件标志
 
template<xwsz_t TSelNum>
xwer_t bind (Sel< TSelNum > *sel, long pos)
 绑定事件标志对象到信号选择器
 
template<xwsz_t TSelNum>
xwer_t bind (Sel< TSelNum > &sel, long pos)
 
template<xwsz_t TSelNum>
xwer_t unbind (Sel< TSelNum > *sel)
 从信号选择器上解绑事件标志对象
 
template<xwsz_t TSelNum>
xwer_t unbind (Sel< TSelNum > &sel)
 
struct xwos_flggetXwosObj ()
 获取XWOS对象指针
 

Protected 成员函数

 Flg ()
 
 ~Flg ()
 

Protected 属性

struct xwos_flgmFlgPtr
 

详细描述

template<xwsz_t TNum>
class xwos::sync::Flg< TNum >

事件标志基类

在文件 Flg.hxx61 行定义.

成员枚举类型说明

◆ Trigger

template<xwsz_t TNum>
enum xwos::sync::Flg::Trigger : xwu32_t

触发条件枚举

枚举值
FlgSetAll 

掩码中所有位同时为1

FlgSetAny 

掩码中的任意位为1

FlgClearAll 

掩码中的所有位同时为0

FlgClearAny 

掩码中的任意位为0

FlgToggleAll 

掩码中所有位翻转

FlgToggleAny 

掩码中任意位翻转

在文件 Flg.hxx67 行定义.

67 : xwu32_t {
74 };
uint32_t xwu32_t
Definition type.h:266
@ XWOS_FLG_TRIGGER_CLR_ANY
Definition flg.h:118
@ XWOS_FLG_TRIGGER_CLR_ALL
Definition flg.h:117
@ XWOS_FLG_TRIGGER_SET_ANY
Definition flg.h:116
@ XWOS_FLG_TRIGGER_TGL_ANY
Definition flg.h:120
@ XWOS_FLG_TRIGGER_TGL_ALL
Definition flg.h:119
@ XWOS_FLG_TRIGGER_SET_ALL
Definition flg.h:115

◆ WaitMode

template<xwsz_t TNum>
enum xwos::sync::Flg::WaitMode : xwu32_t

等待模式枚举

枚举值
FlgWait 

等待模式

FlgWaitTimed 

定时等待模式

FlgWaitUninterruptable 

不可中断等待模式

FlgTryWait 

尝试模式(只测试不等待)

在文件 Flg.hxx79 行定义.

79 : xwu32_t {
80 FlgWait = 0,
84 };
@ FlgWaitUninterruptable
Definition Flg.hxx:82

构造及析构函数说明

◆ Flg()

template<xwsz_t TNum>
xwos::sync::Flg< TNum >::Flg ( )
inlineprotected

在文件 Flg.hxx89 行定义.

89: mFlgPtr(nullptr) {}
struct xwos_flg * mFlgPtr
Definition Flg.hxx:87

◆ ~Flg()

template<xwsz_t TNum>
xwos::sync::Flg< TNum >::~Flg ( )
inlineprotected

在文件 Flg.hxx90 行定义.

90{ mFlgPtr = nullptr; }

成员函数说明

◆ num()

template<xwsz_t TNum>
xwsz_t xwos::sync::Flg< TNum >::num ( )
inline

获取事件的最大数量

在文件 Flg.hxx96 行定义.

96{ return TNum; }

◆ read()

template<xwsz_t TNum>
void xwos::sync::Flg< TNum >::read ( xwos::Bmp< TNum > *  out)
inline

读取事件标志位图的值

参数
[out]out指向缓冲区的指针,通过此缓冲区返回事件标志对象位图的值
注解
  • 上下文:任意

在文件 Flg.hxx104 行定义.

104{ xwos_flg_read(mFlgPtr, out->mData); }
xwbmp_t mData[(((TNum)+(8U *sizeof(xwbmp_t)) - 1U)/(8U *sizeof(xwbmp_t)))]
Definition Bmp.hxx:112
static xwer_t xwos_flg_read(struct xwos_flg *flg, xwbmp_t out[])
XWOS API:读取事件标志位图的值
Definition flg.h:491
函数调用图:

◆ set() [1/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::set ( xwos::Bmp< TNum > *  msk)
inline

同时设置多个事件标志位

参数
[in]msk事件掩码
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意
  • 此C++API会将事件标志位图中,被掩码 msk 覆盖的位全部设置为 1 , 然后 广播 所有正在等待的线程。
  • 线程唤醒后通过比对位图状态,确定事件是否已经满足触发条件, 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 Flg.hxx120 行定义.

120{ return xwos_flg_s1m(mFlgPtr, msk->mData); }
static xwer_t xwos_flg_s1m(struct xwos_flg *flg, xwbmp_t msk[])
XWOS API:同时设置多个事件标志位
Definition flg.h:362
函数调用图:

◆ set() [2/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::set ( xwos::Bmp< TNum > &  msk)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx124 行定义.

124{ return xwos_flg_s1m(mFlgPtr, msk.mData); }
函数调用图:

◆ set() [3/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::set ( unsigned long  pos)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx128 行定义.

128{ return xwos_flg_s1i(mFlgPtr, pos); }
static xwer_t xwos_flg_s1i(struct xwos_flg *flg, xwsq_t pos)
XWOS API:设置单个事件标志位
Definition flg.h:385
函数调用图:

◆ set() [4/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::set ( long  pos)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx132 行定义.

132{ return xwos_flg_s1i(mFlgPtr, (xwsq_t)pos); }
unsigned long xwsq_t
Definition type.h:445
函数调用图:

◆ clear() [1/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::clear ( xwos::Bmp< TNum > *  msk)
inline

同时清除多个事件标志位

参数
[in]msk事件的位图掩码
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意
  • 此CAPI会将事件标志位图中,被掩码 msk 覆盖的位全部清 0 , 然后 广播 所有正在等待的线程。
  • 线程唤醒后通过比对位图状态,确定事件是否已经满足触发条件, 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 Flg.hxx148 行定义.

148{ return xwos_flg_c0m(mFlgPtr, msk->mData); }
static xwer_t xwos_flg_c0m(struct xwos_flg *flg, xwbmp_t msk[])
XWOS API:同时清除多个事件标志位
Definition flg.h:407
函数调用图:

◆ clear() [2/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::clear ( xwos::Bmp< TNum > &  msk)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx152 行定义.

152{ return xwos_flg_c0m(mFlgPtr, msk.mData); }
函数调用图:

◆ clear() [3/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::clear ( unsigned long  pos)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx156 行定义.

156{ return xwos_flg_c0i(mFlgPtr, (xwsq_t)pos); }
static xwer_t xwos_flg_c0i(struct xwos_flg *flg, xwsq_t pos)
XWOS API:清除单个事件标志位
Definition flg.h:430
函数调用图:

◆ clear() [4/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::clear ( long  pos)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx160 行定义.

160{ return xwos_flg_c0i(mFlgPtr, (xwsq_t)pos); }
函数调用图:

◆ toggle() [1/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::toggle ( xwos::Bmp< TNum > *  msk)
inline

同时翻转多个事件标志位

参数
[in]msk事件的位图掩码
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意
  • 此CAPI会将事件标志位图中,被掩码 msk 覆盖的位全部翻转, 然后 广播 所有正在等待的线程。
  • 线程唤醒后通过比对位图状态,确定事件是否已经满足触发条件, 若满足触发条件,就退出等待;若未满足触发条件,重新进入阻塞等待状态。

在文件 Flg.hxx177 行定义.

177{ return xwos_flg_x1m(mFlgPtr, msk->mData); }
static xwer_t xwos_flg_x1m(struct xwos_flg *flg, xwbmp_t msk[])
XWOS API:同时翻转多个事件标志位
Definition flg.h:452
函数调用图:

◆ toggle() [2/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::toggle ( xwos::Bmp< TNum > &  msk)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx181 行定义.

181{ return xwos_flg_x1m(mFlgPtr, msk.mData); }
函数调用图:

◆ toggle() [3/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::toggle ( unsigned long  pos)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx185 行定义.

185{ return xwos_flg_x1i(mFlgPtr, (xwsq_t)pos); }
static xwer_t xwos_flg_x1i(struct xwos_flg *flg, xwsq_t pos)
XWOS API:翻转单个事件标志位
Definition flg.h:475
函数调用图:

◆ toggle() [4/4]

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::toggle ( long  pos)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx189 行定义.

189{ return xwos_flg_x1i(mFlgPtr, (xwsq_t)pos); }
函数调用图:

◆ wait()

template<xwsz_t TNum>
xwer_t xwos::sync::Flg< TNum >::wait ( enum Trigger  trigger,
bool  consumption,
xwos::Bmp< TNum > *  origin,
xwos::Bmp< TNum > *  msk,
enum WaitMode  mode = WaitMode::FlgWait,
xwtm_t  to = ((xwtm_t)((~(xwu64_t)0) >> 1)) 
)
inline

等待事件标志

参数
[in]trigger事件触发条件,取值:
[in]consumption事件触发后是否清除事件:
  • trigger电平触发 时,
    • true 表示清除事件标志
    • false 表示保留事件标志
  • trigger边沿触发 时,此参数没有意义
[in,out]origin指向缓冲区的指针:
  • trigger电平触发
    • (O) 返回事件触发 之前 的位图状态
  • trigger边沿触发
    • (I) 输入时,作为评估事件位图是否发生变化的初始状态
    • (O) 输出时,返回触发后的事件标志位图状态(可作为下一次调用的初始值)
[in]msk事件的位图掩码,表示只关注掩码部分的事件
[in]mode等待模式,取值 Flg::WaitMode
[in]to期望唤醒的时间点, 仅当 mode == Flg::WaitMode::FlgWaitTimed 时有效。
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ETIMEDOUT超时
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解

在文件 Flg.hxx241 行定义.

243 {
244 xwer_t rc;
245 switch (mode) {
247 rc = xwos_flg_wait(mFlgPtr, (enum xwos_flg_trigger_em)trigger,
248 consumption, origin->mData, msk->mData);
249 break;
251 rc = xwos_flg_wait_to(mFlgPtr, (enum xwos_flg_trigger_em)trigger,
252 consumption, origin->mData, msk->mData, to);
253 break;
256 consumption, origin->mData, msk->mData);
257 break;
259 rc = xwos_flg_trywait(mFlgPtr, (enum xwos_flg_trigger_em)trigger,
260 consumption, origin->mData, msk->mData);
261 break;
262 default:
263 rc = xwos_flg_wait(mFlgPtr, (enum xwos_flg_trigger_em)trigger,
264 consumption, origin->mData, msk->mData);
265 break;
266 }
267 return rc;
268 }
signed long xwer_t
Definition type.h:554
static xwer_t xwos_flg_wait(struct xwos_flg *flg, enum xwos_flg_trigger_em trigger, bool consumption, xwbmp_t origin[], xwbmp_t msk[])
XWOS API:等待事件
Definition flg.h:534
static xwer_t xwos_flg_wait_to(struct xwos_flg *flg, enum xwos_flg_trigger_em trigger, bool consumption, xwbmp_t origin[], xwbmp_t msk[], xwtm_t to)
XWOS API:限时等待触发事件
Definition flg.h:585
xwos_flg_trigger_em
事件标志触发条件枚举
Definition flg.h:114
static xwer_t xwos_flg_wait_unintr(struct xwos_flg *flg, enum xwos_flg_trigger_em trigger, bool consumption, xwbmp_t origin[], xwbmp_t msk[])
XWOS API:等待事件,且等待不可被中断
Definition flg.h:674
static xwer_t xwos_flg_trywait(struct xwos_flg *flg, enum xwos_flg_trigger_em trigger, bool consumption, xwbmp_t origin[], xwbmp_t msk[])
XWOS API:检查触发事件
Definition flg.h:629
函数调用图:

◆ bind() [1/2]

template<xwsz_t TNum>
template<xwsz_t TSelNum>
xwer_t xwos::sync::Flg< TNum >::bind ( Sel< TSelNum > *  sel,
long  pos 
)
inline

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

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

在文件 Flg.hxx285 行定义.

285 {
286 return xwos_flg_bind(mFlgPtr, sel->getXwosObj(), (xwsq_t)pos);
287 }
static xwer_t xwos_flg_bind(struct xwos_flg *flg, struct xwos_sel *sel, xwsq_t pos)
XWOS API:绑定事件标志对象到信号选择器
Definition flg.h:307
函数调用图:

◆ bind() [2/2]

template<xwsz_t TNum>
template<xwsz_t TSelNum>
xwer_t xwos::sync::Flg< TNum >::bind ( Sel< TSelNum > &  sel,
long  pos 
)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx292 行定义.

292 {
293 return xwos_flg_bind(mFlgPtr, sel.getXwosObj(), (xwsq_t)pos);
294 }
函数调用图:

◆ unbind() [1/2]

template<xwsz_t TNum>
template<xwsz_t TSelNum>
xwer_t xwos::sync::Flg< TNum >::unbind ( Sel< TSelNum > *  sel)
inline

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

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

在文件 Flg.hxx307 行定义.

307 {
308 return xwos_flg_unbind(mFlgPtr, sel->getXwosObj());
309 }
static xwer_t xwos_flg_unbind(struct xwos_flg *flg, struct xwos_sel *sel)
XWOS API:从信号选择器上解绑事件标志对象
Definition flg.h:324
函数调用图:

◆ unbind() [2/2]

template<xwsz_t TNum>
template<xwsz_t TSelNum>
xwer_t xwos::sync::Flg< TNum >::unbind ( Sel< TSelNum > &  sel)
inline

这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.

在文件 Flg.hxx314 行定义.

314 {
315 return xwos_flg_unbind(mFlgPtr, sel.getXwosObj());
316 }
函数调用图:

◆ getXwosObj()

template<xwsz_t TNum>
struct xwos_flg * xwos::sync::Flg< TNum >::getXwosObj ( )
inline

获取XWOS对象指针

在文件 Flg.hxx321 行定义.

321{ return mFlgPtr; }

结构体成员变量说明

◆ mFlgPtr

template<xwsz_t TNum>
struct xwos_flg* xwos::sync::Flg< TNum >::mFlgPtr
protected

在文件 Flg.hxx87 行定义.


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