Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

signal_set

用于信号集的典型用法的类型定义。

typedef basic_signal_set signal_set;
类型

名称

描述

rebind_executor

将信号集类型重新绑定到另一个执行器。

executor_type

与对象关联的执行器的类型。

flags

枚举,表示向集合添加信号时可能指定的不同类型的标志。

flags_t

可移植性类型定义。

成员函数

名称

描述

add

向 signal_set 添加信号。

使用指定的标志向 signal_set 添加信号。

async_wait

启动异步操作以等待信号传递。

basic_signal_set [构造函数]

构造一个不添加任何信号的信号集。

构造一个信号集并添加一个信号。

构造一个信号集并添加两个信号。

构造一个信号集并添加三个信号。

cancel

取消与信号集关联的所有操作。

clear

从 signal_set 中移除所有信号。

get_executor

获取与对象关联的执行器。

remove

从 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 中移除一个信号编号(使用 removeerase 成员函数),则该信号的任何排队通知都将被丢弃。

信号的多重注册

相同的信号编号可以注册到不同的 signal_set 对象。当信号发生时,每个 signal_set 对象都会调用一个处理程序。

请注意,多重注册仅适用于使用 Asio 注册的信号。应用程序还必须不使用诸如 signal()sigaction() 之类的函数注册信号处理程序。

POSIX 平台上的信号掩码

POSIX 允许使用诸如 sigprocmask()pthread_sigmask() 之类的函数来阻塞信号。为了使信号能够传递,程序必须确保使用 signal_set 对象注册的任何信号在至少一个线程中都是未阻塞的。

要求

头文件:boost/asio/signal_set.hpp

便利头文件:boost/asio.hpp


PrevUpHomeNext