Boost C++ Libraries/Boost.Asio

Boost.Asio 색인 - high_resolution_timer

까마귀75 2021. 1. 29. 13:46
728x90
반응형

high_resolution_timer

고해상도 클럭 기반의 타이머에 대한 Typedef이다.

typedef basic_waitable_timer< chrono::high_resolution_clock > high_resolution_timer;

유형

이 름 설 명
rebind_executor 타이머 유형을 다른 실행자에게 다시 바인드한다.
clock_type 클럭 유형이다.
duration 클럭의 지속 기간 유형이다.
executor_type 개체와 연관된 실행기(executor)의 유형이다.
time_point 클럭의 시점 유형이다.
traits_type 대기 특성 유형이다.

멤버 함수

이 름 설 명
async_wait 타이머에서 비동기 대기를 시작한다.
basic_waitable_timer
[constructor]
생성자 (constructor)

특정 만료 시간을 절대 시간으로 설정하는 생성자 (constructor)

특정 만료 시간을 상대 시간으로 설정하는 생성자 (constuctor)

다른 basic_waitable_timer에서 이동 생성하는 이동-생성자 (move constructor)
cancel 타이머에서 대기중인 모든 비동기 작업을 취소한다.

(더 이상 사용되지 않음: error_code가 없는 오버로드 사용) 타이머에서 대기중인 모든 비동기 작업을 취소한다.
cancel_one 타이머에서 대기중인 하나의 비동기 작업을 취소한다.

(더 이상 사용되지 않음: error_code가 없는 오버로드 사용) 타이머에서 대기중인 하나의 비동기 작업을 취소한다.
expires_after 상대 시간으로 타미어의 만료 시간을 설정한다.
expires_at (더 이상 사용되지 않음: expiry()를 사용) 타이머 만료 시간을 절대 시간으로 가져온다.

타이머 만료 시간을 절대 시간으로 설정한다.

(더 이상 사용되지 않음: error_code가 없는 오버로드 사용) 타이머 만료 시간을 절대 시간으로 설정한다.
expires_from_now (더 이상 사용되지 않음: expiry()를 사용) 타이머 만료 시간을 상대 시간으로 가져온다.

(더 이상 사용되지 않음: expires_after()를 사용) 타이머 만료 시간을 상대 시간으로 설정한다.
expiry 타이머 만료 시간을 절대 시간으로 가져온다.
get_executor 개체와 연관된 실행기(executor)를 가져온다.
operator= 다른 basic_waitable_timer에서 이동 할당한다.
wait 타이머 블럭 대기를 수행한다.
~basic_waitable_timer
[destructor]
타이머를 소멸한다.

basic_waitable_timer 클래스 템플릿은 타이머가 만료될 때까지 블럭 또는 비동기 대기를 수행하는 기능을 제공한다.

대기 가능 타이머는 항상 "expired(만료됨)" 또는 "not expired(만료되지 않음)" 두 가지 상태중 하나이다. 만료된 타이머에서 wait() 또는 async_wait() 함수가 호출되면, 대기 작업은 즉시 완료된다.

대부분의 응용프로그램은 steady_timer, system_timer 또는 high_resolution_timer typedef 중 하나를 사용한다.

추가 설명

이 대기 가능 타이머 기능은 C++ 11 표준 라이브러리의 <chrono> 기능 또는 Boost.Chrono 라이브러리와 함께 사용하기 위한 것이다.

스레드 안정성

고유 개체 : 안전함
공유 개체 : 안전하지 않음

예제

블럭 대기(C++ 11)를 수행한다:

// Construct a timer without setting an expiry time.
boost::asio::steady_timer timer(my_context);

// Set an expiry time relative to now.
timer.expires_after(std::chrono::seconds(5));

// Wait for the timer to expire.
timer.wait();

비동기 대기(C++ 11)를 수행한다:

void handler(const boost::system::error_code& error)
{
  if (!error)
  {
    // Timer expired.
  }
}

...

// Construct a timer with an absolute expiry time.
boost::asio::steady_timer timer(my_context,
    std::chrono::steady_clock::now() + std::chrono::seconds(60));

// Start an asynchronous wait.
timer.async_wait(handler);

활성화된 대기 가능한 타이머의 만료 시간 변경

보류중인 비동기 대기가 있는 동안 타이머의 만료 시간을 변경하면 해당 대기 작업이 취소된다. 타이머와 연관된 동작이 한 번만 수행되도록 하려면 다음과 같이 사용한다:

void on_some_event()
{
  if (my_timer.expires_after(seconds(5)) > 0)
  {
    // We managed to cancel the timer. Start new asynchronous wait.
    my_timer.async_wait(on_timeout);
  }
  else
  {
    // Too late, timer has already expired!
  }
}

void on_timeout(const boost::system::error_code& e)
{
  if (e != boost::asio::error::operation_aborted)
  {
    // Timer was not cancelled, take necessary action.
  }
}
  • boost::asio::basic_waitable_timer::expires_after() 함수는 보류중인 모든 비동기 대기를 취소하고, 취소된 비동기 대기의 수를 반환한다. 만약 0을 반환하면 취소 작업이 너무 늦은 것이고 대기 핸들러가 이미 실행되었거나 곧 실행될 것이다. 만약 1을 반환하면 대기 핸들러가 성공적으로 취소된 것이다.
  • 만약 대기 핸들러가 취소되면, boost::system::error_code에는 boost::asio::error::operation_aborted 값이 포함되어 전달된다.

typedef는 가능한 경우 C++ 11 <chrono> 표준 라이브러리 기능을 사용한다. 그렇지 않으면 Boost.Chrono 라이브러리를 사용할 수 있다. Boost.Chrono를 명시적으로 사용하려면, basic_waitable_timer 템플릿을 직접 사용한다.

typedef basic_waitable_timer<boost::chrono::high_resolution_clock> timer;

요구 사항

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

Boost.Asio 홈

728x90
반응형