signal_set
시그널 세트의 일반적인 사용을 위한 typedef이다.
typedef basic_signal_set signal_set;
유 형
이 름 | 설 명 |
rebind_executor | 시그널 세트 유형을 다른 실행기(executor)로 다시 바인드한다. |
executor_type | 개체와 연결된 실행기(executor)의 유형이다. |
멤버 함수
이 름 | 설 명 |
add | signal_set에 시그널을 추가한다. |
async_wait | 시그널이 전달될 때까지 대기하는 비동기 작업을 시작한다. |
basic_signal_set [constructor] |
시그널의 추가없이 시그널 세트를 생성한다. — 시그널 세트를 생성하고 하나의 시그널을 추가한다. — 시그널 세트를 생성하고 두 개의 시그널을 추가한다. — 시그널 세트를 생성하고 세 개의 시그널을 추가한다. |
cancel | 시그널 세트와 연결된 모든 작업을 취소한다. |
clear | signal_set에서 모든 시그널을 제거한다. |
get_executor | 개체와 연결된 실행기(executor)를 가져온다. |
remove | signal_set에서 시그널을 제거한다. |
~basic_signal_set [destructor] |
시그널 세트를 소멸한다. |
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 플랫폼에서 시그널 마스킹
POSIX는 sigprocmask()와 pthread_sigmask() 같은 함수를 사용하여 시그널을 차단할 수 있다. 시그널을 전달하려면, 프로그램에서 signal_set 개체를 사용하여 등록된 모든 시그널이 적어도 하나의 스레드에서는 차단 해제되도록 해야 한다.
요구 사항
일반 헤더: boost/asio/signal_set.hpp
편의 헤더: boost/asio.hpp
Boost.Asio 홈
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 색인 - ssl::context_base::single_dh_use (0) | 2021.03.03 |
---|---|
Boost.Asio 색인 - ssl::context::single_dh_use (0) | 2021.03.03 |
Boost.Asio 색인 - socket_base::shutdown_type (0) | 2021.03.03 |
Boost.Asio 색인 - basic_stream_socket::shutdown_type (0) | 2021.03.03 |
Boost.Asio 색인 - basic_socket_acceptor::shutdown_type (0) | 2021.03.03 |