RT-Thread API参考手册  3.1.1
嵌入式实时操作系统

信号接口 更多...

结构体

struct  siginfo_node
 信号控制块 更多...
 

函数

rt_sighandler_t rt_signal_install (int signo, rt_sighandler_t handler)
 信号安装 更多...
 
void rt_signal_mask (int signo)
 信号阻塞 更多...
 
void rt_signal_unmask (int signo)
 解除信号阻塞 更多...
 
int rt_signal_wait (const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout)
 等待信号 更多...
 
int rt_thread_kill (rt_thread_t tid, int sig)
 信号的发送 更多...
 

详细描述

信号接口

软中断信号(signal,又简称为信号)用来通知线程发生了异步事件。在软件层次上是对中断机制的一种模拟, 在原理上,一个线程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是线程间通信机制中唯一的 异步通信机制,一个线程不必通过任何操作来等待信号的到达,事实上,线程也不知道信号到底什么时候到达, 线程之间可以互相通过调用 kill 发送软中断信号。

收到信号的线程对各种信号有不同的处理方法。处理方法可以分为三类:

函数说明

rt_sighandler_t rt_signal_install ( int  signo,
rt_sighandler_t  handler 
)

信号安装

如果线程要处理某一信号,那么就要在线程中安装该信号。安装信号主要 用来确定信号值及线程针对该信号值的动作之间的映射关系,即线程将要处理 哪个信号;该信号被传递给线程时,将执行何种操作。

参数
signo信号值(只有 SIGUSR1 和 SIGUSR2 是开放给用户使用的)
handler信号值的处理。可以忽略该信号(参数设为 SIG_IGN); 可以采用系统默认方式处理信号 (参数设为 SIG_DFL);也可以自己实现 处理方式 (参数指定一个函数地址)。
注解
成功安装信号前的 handler 值,失败返回SIG_ERR。
示例:
signal_sample.c.
void rt_signal_mask ( int  signo)

信号阻塞

该函数将阻塞指定的信号。

参数
signo指定的信号值
void rt_signal_unmask ( int  signo)

解除信号阻塞

该函数将解除指定信号的阻塞。

参数
signo指定的信号值
示例:
signal_sample.c.
int rt_signal_wait ( const rt_sigset_t *  set,
rt_siginfo_t *  si,
rt_int32_t  timeout 
)

等待信号

该函数将等待 set 信号的到来,如果没有等到这个信号,则把线程给挂起来, 直到等到这个信号或者等待时间超过指定的超时时间 timeout。

参数
set指定等待的信号值
si等待的信号句柄
timeout指定的超时时间
int rt_thread_kill ( rt_thread_t  tid,
int  sig 
)

信号的发送

调用该函数可以用来向任何线程发送任何信号。

参数
tid接收信号的线程
sig指定的信号值
示例:
signal_sample.c.