|
XWOS API
4.0
XWOS C/C++ API参考手册
|
信号量基类 更多...
#include <Sem.hxx>


Public 类型 | |
| enum | WaitMode : xwu32_t { SemWait = 0 , SemWaitTimed , SemWaitUninterruptable , SemTryWait } |
| 静态信号量的等待模式 更多... | |
Public 成员函数 | |
| xwer_t | post () |
| 发布信号量 | |
| xwer_t | wait (enum WaitMode mode=WaitMode::SemWait, xwtm_t to=((xwtm_t)((~(xwu64_t) 0) > > 1))) |
| 等待并获取信号量 | |
| xwer_t | freeze () |
| 冻结信号量 | |
| xwer_t | thaw () |
| 解冻信号量 | |
| xwssq_t | max () |
| 获取信号量计数器的最大值 | |
| xwssq_t | value () |
| 获取信号量计数器的值 | |
| 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_sem * | getXwosObj () |
| 获取XWOS对象指针 | |
Protected 成员函数 | |
| Sem () | |
| ~Sem () | |
Protected 属性 | |
| struct xwos_sem * | mSemPtr |
| enum xwos::sync::Sem::WaitMode : xwu32_t |
静态信号量的等待模式
| 枚举值 | |
|---|---|
| SemWait | 等待模式 |
| SemWaitTimed | 定时等待模式 |
| SemWaitUninterruptable | 不可中断等待模式 |
| SemTryWait | 尝试模式(只测试不等待) |
|
inlineprotected |
|
inline |
发布信号量
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENEGATIVE | 信号量对象已被冻结 |
| -ERANGE | 信号量对象的值已经最大 |
-ENEGATIVE 。 
|
inline |
等待并获取信号量
| [in] | mode | 锁模式,取值 Sem::WaitMode |
| [in] | to | 期望唤醒的时间点, 仅当 mode == Sem::WaitMode::SemWaitTimed 时有效。 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ETIMEDOUT | 超时 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX | 不在线程上下文中 |
| -EDSPMPT | 抢占被关闭 |
| -EDSBH | 中断底半部被关闭 |
mode == Sem::WaitMode::SemTryWait : 任意mode != Sem::WaitMode::SemTryWait : 线程Sem::WaitMode::SemWait: 调用线程会阻塞等待上锁。Sem::WaitMode::SemWaitTimed 定时等待模式, to 表示等待超时的时间点:to 通常是未来时间点,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;to 是过去的时间点,将直接返回 -ETIMEDOUT 。Sem::WaitMode::SemWaitUninterruptable 不可中断等待模式。Sem::WaitMode::SemTryWait 尝试模式(只测试不等待)。 
|
inline |
冻结信号量
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EALREADY | 信号量对象已被冻结 |
-EALREADY 。 
|
inline |
解冻信号量
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -EALREADY | 信号量对象未被冻结 |
-EALREADY 。 
|
inline |
获取信号量计数器的最大值


|
inline |
获取信号量计数器的值


绑定信号量对象到信号选择器
| [in] | sel | 信号选择器的指针 |
| [in] | pos | 信号量对象映射到信号选择器位图中的位置 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ECHRNG | 位置超出范围 |
| -EALREADY | 同步对象已经绑定到事件对象 |
| -EBUSY | 通道已经被其他同步对象独占 |

绑定信号量对象到信号选择器
| [in] | sel | 信号选择器的引用 |
| [in] | pos | 信号量对象映射到信号选择器位图中的位置 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ECHRNG | 位置超出范围 |
| -EALREADY | 同步对象已经绑定到事件对象 |
| -EBUSY | 通道已经被其他同步对象独占 |

从信号选择器上解绑信号量对象
| [in] | sel | 信号选择器的引用 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENOTCONN | 同步对象没有绑定到事件对象上 |

从信号选择器上解绑信号量对象
| [in] | sel | 信号选择器的引用 |
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -ENOTCONN | 同步对象没有绑定到事件对象上 |

|
inline |