用于信号集的典型用法的类型定义。
typedef basic_signal_set signal_set;
名称 |
描述 |
---|---|
将信号集类型重新绑定到另一个执行器。 |
|
与对象关联的执行器的类型。 |
|
枚举,表示向集合添加信号时可能指定的不同类型的标志。 |
|
可移植性类型定义。 |
名称 |
描述 |
---|---|
向 signal_set 添加信号。 |
|
启动异步操作以等待信号传递。 |
|
basic_signal_set [构造函数] |
构造一个不添加任何信号的信号集。 |
取消与信号集关联的所有操作。 |
|
从 signal_set 中移除所有信号。 |
|
获取与对象关联的执行器。 |
|
从 signal_set 中移除信号。 |
|
~basic_signal_set [析构函数] |
销毁信号集。 |
basic_signal_set
类提供了异步等待一个或多个信号发生的能力。
独立 对象: 安全。
共享 对象: 不安全。
执行异步等待
void handler( const boost::system::error_code& error, int signal_number) { if (!error) { // A signal occurred. } } ... // Construct a signal set registered for process termination. boost::asio::signal_set signals(my_context, SIGINT, SIGTERM); // Start an asynchronous wait for one of the signals to occur. signals.async_wait(handler);
如果一个信号注册到一个 signal_set,并且在没有等待处理程序时信号发生,则信号通知将被排队。在该 signal_set 上的下一个 async_wait 操作将使通知出队。如果多个通知排队,后续的 async_wait 操作将一次使它们出队一个。信号通知按照信号编号升序出队。
如果从 signal_set 中移除一个信号编号(使用 remove
或 erase
成员函数),则该信号的任何排队通知都将被丢弃。
相同的信号编号可以注册到不同的 signal_set 对象。当信号发生时,每个 signal_set 对象都会调用一个处理程序。
请注意,多重注册仅适用于使用 Asio 注册的信号。应用程序还必须不使用诸如 signal()
或 sigaction()
之类的函数注册信号处理程序。
POSIX 允许使用诸如 sigprocmask()
和 pthread_sigmask()
之类的函数来阻塞信号。为了使信号能够传递,程序必须确保使用 signal_set 对象注册的任何信号在至少一个线程中都是未阻塞的。
头文件:boost/asio/signal_set.hpp
便利头文件:boost/asio.hpp