B_QuRT_User_Guide(15)
9 任意信号(Any-signals)
线程使用任意信号根据内部事件的发生来同步它们的执行。
如果在任意信号对象中设置了信号,并且线程在任意信号对象上等待该信号,则该线程被唤醒。 如果被唤醒线程的优先级高于当前线程,则可能发生上下文切换。
线程负责在再次等待它们之前明确清除任何信号对象中的任何设置信号。 如果线程等待已设置的信号,则线程继续执行。
一个任意信号对象包含 32 个信号,它们表示为 32 位值中的 0-31 位。 位值 1 表示设置信号,0 表示清除。
注意:至多,一个线程可以在任何给定时间等待任意信号对象。
Any-signal 存储在支持以下操作的共享对象中:
- qurt_anysignal_clear()
- qurt_anysignal_destroy()
- qurt_anysignal_get()
- qurt_anysignal_init()
- qurt_anysignal_set()
- qurt_anysignal_wait()
- qurt_anysignal_wait_timed()
- Data Types
9.1 qurt_anysignal_clear()
9.1.1 功能文档
9.1.1.1 unsigned int qurt_anysignal_clear ( qurt_anysignal_t ∗ signal, unsigned int mask )
清除指定任意信号对象中的信号。
信号表示为 32 位掩码值中的位 0 到 31。 屏蔽位值为1表示必须清除信号,0表示不清除信号。
相关数据类型
qurt_anysignal_t
参数
in | signal | 指向任意信号对象的指针,它指定要修改的任意信号对象。 |
in | mask | 信号掩码值标识要在任意信号对象中清除的各个信号。 |
返回值
位掩码 – 旧信号值(清除前)。
依赖关系
None.
9.2 qurt_anysignal_destroy()
9.2.1 功能文档
9.2.1.1 static void qurt_anysignal_destroy ( qurt_anysignal_t ∗ signal )
销毁指定的任意信号对象。
注意:任何信号对象在不再使用时必须销毁。 不这样做会导致 QuRT 内核中的资源泄漏。
任何信号对象在它们仍在使用时不得被破坏。 如果发生这种情况,则 QuRT 的行为是未定义的。
相关数据类型
qurt_anysignal_t
参数
in | signal | 指向要销毁的任意信号对象的指针。 |
返回值
None.
依赖关系
None.
9.3 qurt_anysignal_get()
9.3.1 功能文档
9.3.1.1 static unsigned int qurt_anysignal_get ( qurt_anysignal_t ∗ signal )
从任意信号对象获取信号值。
返回指定任意信号对象的当前信号值。
相关数据类型
qurt_anysignal_t
参数
in | signal | 指向要访问的任意信号对象的指针。 |
返回值
具有指定任意信号对象的当前信号值的位掩码。
依赖关系
None.
9.4 qurt_anysignal_init()
9.4.1 功能文档
9.4.1.1 static void qurt_anysignal_init ( qurt_anysignal_t ∗ signal )
初始化一个任意信号对象。
任意信号对象最初被清除。
相关数据类型
qurt_anysignal_t
参数
out | signal | 指向已初始化的任意信号对象的指针。 |
返回值
None.
依赖关系
None.
9.5 qurt_anysignal_set()
9.5.1 功能文档
9.5.1.1 unsigned int qurt_anysignal_set ( qurt_anysignal_t ∗ signal, unsigned int mask )
在指定的任意信号对象中设置信号。
信号表示为 32 位掩码值中的位 0 到 31。 掩码位值为 1 表示必须设置信号,而 0 表示不设置信号。
相关数据类型
qurt_anysignal_t
参数
in | signal | 指向要修改的任意信号对象的指针。 |
in | mask | 信号掩码值标识要在任意信号对象中设置的各个信号。 |
返回值
旧信号值的位掩码(设置前)。
依赖关系
None.
9.6 qurt_anysignal_wait()
9.6.1 功能文档
9.6.1.1 static unsigned int qurt_anysignal_wait ( qurt_anysignal_t ∗ signal, unsigned int mask )
等待任何信号对象。
挂起当前线程,直到设置了任何一个指定信号。
信号表示为 32 位掩码值中的位 0 到 31。 掩码位值为 1 表示必须等待信号,而 0 表示不等待信号。 如果在任意信号对象中设置了信号,并且线程在任意信号对象上等待该信号,则该线程被唤醒。 如果被唤醒线程的优先级高于当前线程,则可能发生上下文切换。
注意:在任何给定时间,一个线程最多可以等待一个任意信号对象
相关数据类型
qurt_anysignal_t
参数
in | signal | 指向要等待的任意信号对象的指针。 |
in | mask | 信号掩码值,它指定要等待的任意信号对象中的各个信号。 |
返回值
当前信号值的位掩码。
依赖关系
None.
9.7 qurt_anysignal_wait_timed()
9.7.1 功能文档
9.7.1.1 int qurt_anysignal_wait_timed ( qurt_anysignal_t ∗ signal, unsigned int mask, unsigned int ∗ signals, unsigned long long int duration )
等待任何信号对象。
挂起当前线程,直到设置了任何一个指定信号或超时到期。
信号表示为 32 位掩码值中的位 0 到 31。 掩码位值为 1 表示必须等待信号,而 0 表示不等待信号。 如果在任意信号对象中设置了信号,并且线程在任意信号对象上等待该信号,则线程被唤醒。 如果被唤醒线程的优先级高于当前线程,则可能发生上下文切换。
注意:至多,一个线程可以在任何给定时间等待任意信号对象。
相关数据类型
qurt_anysignal_t
参数
in | signal | 指向要等待的任意信号对象的指针。 |
in | mask | 信号掩码值,它指定要等待的任意信号对象中的各个信号。 |
in | signals | 当前信号值的位掩码。 |
in | duration | 间隔(以微秒为单位)持续时间值必须在 QURT_TIMER_MIN_DURATION 和 QURT_TIMER_MAX_DURATION 之间。 |
返回值
QURT_EOK – 成功
QURT_ETIMEDOUT – 超时
依赖关系
None.
9.8 Data Types
本节介绍任意信号服务的数据类型。
- 任意信号在QuRT 中表示为qurt_anysignal_t 类型的对象。
9.8.1 Typedef Documentation
9.8.1.1 typedef qurt_signal_t qurt_anysignal_t
qurt_signal_t 取代 qurt_anysignal_t。 添加此类型定义是为了向后兼容。