|
| static xwer_t | xwos_sel_init (struct xwos_sel *sel, xwsz_t num, xwbmp_t *bmp, xwbmp_t *msk) |
| | XWOS API:静态方式初始化信号选择器
|
| |
| static xwer_t | xwos_sel_fini (struct xwos_sel *sel) |
| | XWOS API:销毁静态方式初始化的信号选择器
|
| |
| static xwer_t | xwos_sel_grab (struct xwos_sel *sel) |
| | XWOS API:增加信号选择器对象的引用计数
|
| |
| static xwer_t | xwos_sel_put (struct xwos_sel *sel) |
| | XWOS API:减少信号选择器对象的引用计数
|
| |
| static xwer_t | xwos_sel_create (xwos_sel_d *seld, xwsz_t num) |
| | XWOS API:动态方式创建信号选择器
|
| |
| static xwer_t | xwos_sel_delete (xwos_sel_d seld) |
| | XWOS API:删除动态方式创建的信号选择器
|
| |
| static xwer_t | xwos_sel_acquire (xwos_sel_d seld) |
| | XWOS API:检查信号选择器对象的标签并增加引用计数
|
| |
| static xwer_t | xwos_sel_release (xwos_sel_d seld) |
| | XWOS API:检查对象的标签并减少引用计数
|
| |
| static xwsq_t | xwos_sel_get_tik (struct xwos_sel *sel) |
| | XWOS API:获取信号选择器对象的标签
|
| |
| static xwos_sel_d | xwos_sel_get_d (struct xwos_sel *sel) |
| | XWOS API:获取信号选择器对象描述符
|
| |
| static xwer_t | xwos_sel_bind (struct xwos_sel *src, struct xwos_sel *dst, xwsq_t pos) |
| | XWOS API:绑定源信号选择器到目的信号选择器
|
| |
| static xwer_t | xwos_sel_unbind (struct xwos_sel *src, struct xwos_sel *dst) |
| | XWOS API:从目的信号选择器上解绑源信号选择器
|
| |
| static xwer_t | xwos_sel_get_num (struct xwos_sel *sel, xwsz_t *numbuf) |
| | XWOS API:获取信号选择器中的信号槽的数量
|
| |
| static xwer_t | xwos_sel_select (struct xwos_sel *sel, xwbmp_t msk[], xwbmp_t trg[]) |
| | XWOS API:等待信号选择器中的 选择信号
|
| |
| static xwer_t | xwos_sel_select_to (struct xwos_sel *sel, xwbmp_t msk[], xwbmp_t trg[], xwtm_t to) |
| | XWOS API:限时等待信号选择器中的 选择信号
|
| |
| static xwer_t | xwos_sel_tryselect (struct xwos_sel *sel, xwbmp_t msk[], xwbmp_t trg[]) |
| | XWOS API:检测信号选择器中是否有 选择信号
|
| |
| static xwer_t | xwos_sel_select_unintr (struct xwos_sel *sel, xwbmp_t msk[], xwbmp_t trg[]) |
| | XWOS API:等待信号选择器中的 选择信号 ,且等待不可被中断
|
| |
技术参考手册: 信号选择器
信号选择器的静态初始化、销毁
信号选择器的动态创建、删除
获取信号选择器的状态
选择信号
使用信号选择器选择信号选择器
信号选择器对象的生命周期管理
- 通过 对象指针 管理生命周期:
- 通过 对象描述符 管理生命周期:
对象描述符和对象标签
已知信号选择器对象的指针的情况下,可以通过 xwos_sel_get_d() 获取 xwos_sel_d , 或可以通过 xwos_sel_get_tik() 获取对象标签。
C++
C++头文件: xwos/osal/sync/sel.hxx
◆ XWOS_SEL_NILD
XWOS API:空的信号选择器对象描述符
在文件 sel.h 第 97 行定义.
◆ xwos_sel_init()
XWOS API:静态方式初始化信号选择器
- 参数
-
| [in] | sel | 信号选择器对象的指针 |
| [in] | num | 信号选择器中信号的数量 |
| [in] | bmp | 信号选择器用来记录信号状态的位图缓冲区 |
| [in] | msk | 信号选择器用来记录掩码状态的位图缓冲区 |
- 返回
- 错误码
- 返回值
-
- 注解
-
在文件 sel.h 第 112 行定义.
114{
115 return xwosdl_sel_init(&sel->
ossel, num, bmp, msk);
116}
◆ xwos_sel_fini()
XWOS API:销毁静态方式初始化的信号选择器
- 参数
-
- 返回
- 错误码
- 返回值
-
- 注解
-
在文件 sel.h 第 128 行定义.
129{
130 return xwosdl_sel_fini(&sel->
ossel);
131}
◆ xwos_sel_grab()
XWOS API:增加信号选择器对象的引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EOBJDEAD | 对象无效 |
- 注解
-
此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。
在文件 sel.h 第 147 行定义.
148{
149 return xwosdl_sel_grab(&sel->
ossel);
150}
◆ xwos_sel_put()
XWOS API:减少信号选择器对象的引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EOBJDEAD | 对象无效 |
- 注解
-
此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。
在文件 sel.h 第 166 行定义.
167{
168 return xwosdl_sel_put(&sel->
ossel);
169}
◆ xwos_sel_create()
XWOS API:动态方式创建信号选择器
- 参数
-
| [out] | seld | 指向缓冲区的指针,通过此缓冲区返回信号选择器对象描述符 |
| [in] | num | 信号选择器中信号的数量 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENOMEM | 内存不足 |
- 注解
-
在文件 sel.h 第 183 行定义.
184{
185 return xwosdl_sel_create((xwosdl_sel_d *)seld, num);
186}
◆ xwos_sel_delete()
XWOS API:删除动态方式创建的信号选择器
- 参数
-
- 返回
- 错误码
- 返回值
-
- 注解
-
在文件 sel.h 第 198 行定义.
199{
200 return xwosdl_sel_delete(&seld.
sel->
ossel, seld.
tik);
201}
◆ xwos_sel_acquire()
XWOS API:检查信号选择器对象的标签并增加引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -ENILOBJD | 空的对象描述符 |
| -EOBJDEAD | 对象无效 |
| -EACCES | 对象标签检查失败 |
- 注解
-
在文件 sel.h 第 215 行定义.
216{
217 return xwosdl_sel_acquire(&seld.
sel->
ossel, seld.
tik);
218}
◆ xwos_sel_release()
XWOS API:检查对象的标签并减少引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -ENILOBJD | 空的对象描述符 |
| -EOBJDEAD | 对象无效 |
| -EACCES | 对象标签检查失败 |
- 注解
-
在文件 sel.h 第 232 行定义.
233{
234 return xwosdl_sel_release(&seld.
sel->
ossel, seld.
tik);
235}
◆ xwos_sel_get_tik()
XWOS API:获取信号选择器对象的标签
- 参数
-
- 返回
- 信号选择器对象的标签
- 注解
-
在文件 sel.h 第 245 行定义.
246{
247 return xwosdl_sel_get_tik(&sel->
ossel);
248}
◆ xwos_sel_get_d()
XWOS API:获取信号选择器对象描述符
- 参数
-
- 返回
- 信号选择器对象描述符
- 注解
-
在文件 sel.h 第 258 行定义.
259{
261
263 seld.
tik = xwosdl_sel_get_tik(&sel->
ossel);
264 return seld;
265}
◆ xwos_sel_bind()
XWOS API:绑定源信号选择器到目的信号选择器
- 参数
-
| [in] | src | 源信号选择器对象的指针 |
| [in] | dst | 目的信号选择器对象的指针 |
| [in] | pos | 同步对象映射到位图中的位置 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ECHRNG | 位置超出范围 |
| -EALREADY | 同步对象已经绑定到事件对象 |
| -EBUSY | 通道已经被其他同步对象独占 |
- 注解
-
多个信号选择器可以依次绑定,形成信号传递链。 但不可循环绑定,否则会造成无限循环传递。
在文件 sel.h 第 286 行定义.
287{
288 return xwosdl_sel_bind(&src->
ossel, &dst->
ossel, pos);
289}
◆ xwos_sel_unbind()
XWOS API:从目的信号选择器上解绑源信号选择器
- 参数
-
| [in] | src | 源信号选择器对象的指针 |
| [in] | dst | 目的信号选择器对象的指针 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ENOTCONN | 同步对象没有绑定到事件对象上 |
- 注解
-
在文件 sel.h 第 303 行定义.
304{
305 return xwosdl_sel_unbind(&src->
ossel, &dst->
ossel);
306}
◆ xwos_sel_get_num()
XWOS API:获取信号选择器中的信号槽的数量
- 参数
-
| [in] | sel | 信号选择器对象的指针 |
| [out] | numbuf | 指向缓冲区的指针,通过此缓冲区返回信号槽的数量 |
- 返回
- 错误码
- 返回值
-
- 注解
-
在文件 sel.h 第 319 行定义.
320{
321 return xwosdl_sel_get_num(&sel->
ossel, numbuf);
322}
◆ xwos_sel_select()
XWOS API:等待信号选择器中的 选择信号
- 参数
-
| [in] | sel | 信号选择器对象的指针 |
| [in] | msk | 同步对象位图掩码,表示只关注掩码内的同步对象 |
| [out] | trg | 指向缓冲区的指针,通过此缓冲区返回已触发的同步对象位图掩码 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX | 不在线程上下文中 |
- 注解
-
在文件 sel.h 第 338 行定义.
339{
340 return xwosdl_sel_select(&sel->
ossel, msk, trg);
341}
◆ xwos_sel_select_to()
XWOS API:限时等待信号选择器中的 选择信号
- 参数
-
| [in] | sel | 信号选择器对象的指针 |
| [in] | msk | 同步对象位图掩码,表示只关注掩码内的同步对象 |
| [out] | trg | 指向缓冲区的指针,通过此缓冲区返回已触发的同步对象位图掩码 |
| [in] | to | 期望唤醒的时间点 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ETIMEDOUT | 超时 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX | 不在线程上下文中 |
- 注解
-
to 表示等待超时的时间点:
to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
- 如果
to 是过去的时间点,将直接返回 -ETIMEDOUT 。
在文件 sel.h 第 364 行定义.
367{
368 return xwosdl_sel_select_to(&sel->
ossel, msk, trg, to);
369}
◆ xwos_sel_tryselect()
XWOS API:检测信号选择器中是否有 选择信号
- 参数
-
| [in] | sel | 信号选择器对象的指针 |
| [in] | msk | 同步对象位图掩码,表示只关注掩码内的同步对象 |
| [out] | trg | 指向缓冲区的指针,通过此缓冲区返回已触发的同步对象位图掩码 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENODATA | 没有任何同步对象向信号选择器发送 选择信号 |
- 注解
-
若没有 **选择信号**,立即返回错误码 -ENODATA ,不会等待。
在文件 sel.h 第 386 行定义.
387{
388 return xwosdl_sel_select(&sel->
ossel, msk, trg);
389}
◆ xwos_sel_select_unintr()
XWOS API:等待信号选择器中的 选择信号 ,且等待不可被中断
- 参数
-
| [in] | sel | 信号选择器对象的指针 |
| [in] | msk | 同步对象位图掩码,表示只关注掩码内的同步对象 |
| [out] | trg | 指向缓冲区的指针,通过此缓冲区返回已触发的同步对象位图掩码 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX | 不在线程上下文中 |
- 注解
-
在文件 sel.h 第 405 行定义.
406{
407 return xwosdl_sel_select_unintr(&sel->
ossel, msk, trg);
408}