Boost C++ Libraries/Boost.Asio

Boost.Asio - signal_set

까마귀75 2021. 3. 3. 11:12
728x90
반응형

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에서 제거하면(removeerase 멤버 함수를 사용), 해당 시그널에 대한 큐에 있는 모든 알림이 삭제된다.

시그널 다중 등록

동일한 시그널 번호가 다른 signal_set 개체에 등록될 수 있다. 시그널이 발생하면, 각 signal_set 개체에 대한 하나의 핸들러가 호출된다.

다중 등록은 Asio를 사용하여 등록된 시그널에 대해서만 작동한다. 응용프로그램은 signal()이나 sigaction()와 같은 함수를 사용하여 시그널 핸들러를 등록하면 안된다.

POSIX 플랫폼에서 시그널 마스킹

POSIXsigprocmask()pthread_sigmask() 같은 함수를 사용하여 시그널을 차단할 수 있다. 시그널을 전달하려면, 프로그램에서 signal_set 개체를 사용하여 등록된 모든 시그널이 적어도 하나의 스레드에서는 차단 해제되도록 해야 한다.

요구 사항

일반 헤더: boost/asio/signal_set.hpp
편의 헤더: boost/asio.hpp

Boost.Asio 홈

728x90
반응형