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 홈
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 색인 - ip::network_v4::hosts (0) | 2021.01.29 |
---|---|
Boost.Asio 색인 - ip::basic_resolver_query::hints (0) | 2021.01.29 |
Boost.Asio 색인 - thread_pool::has_service (0) | 2021.01.29 |
Boost.Asio 색인 - system_context::has_service (0) | 2021.01.29 |
Boost.Asio 색인 - io_context::has_service (0) | 2021.01.29 |