728x90
반응형
system_timer
시스템 시간을 기반으로 하는 타이머에 대한 typedef이다.
typedef basic_waitable_timer< chrono::system_clock > system_timer;
유 형
이 름 | 설 명 |
rebind_executor | 타이머 유형을 다른 실행기(executor)로 다시 바인드한다. |
clock_type | 시간 유형 |
duration | 시간의 기간 유형 |
executor_type | 개체와 연결된 실행기(executor) 유형. |
time_point | 시간의 시점 유형. |
traits_type | 대기 특성 유형. |
멤버 함수
이 름 | 설 명 |
async_wait | 타이머에서 비동기 대기를 시작한다. |
basic_waitable_timer [constructor] |
생성자. — 특정 만료 시간을 절대 시간으로 설정하는 생성자. — 특정 만료 시간을 상대 시간(호출 시점 기준)으로 설정하는 생성자. — 다른 basic_waitable_timer에서 이동-생성 |
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::system_clock> timer;
요구 사항
일반 헤더: boost/asio/system_timer.hpp
편의 헤더: boost/asio.hpp
Boost.Asio 홈
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 색인 - executor::target (0) | 2021.03.05 |
---|---|
Boost.Asio 색인 - execution::any_executor::target (0) | 2021.03.05 |
Boost.Asio 색인 - system_executor (0) | 2021.03.05 |
Boost.Asio 색인 - basic_socket_streambuf::sync (0) | 2021.03.05 |
Boost.Asio 색인 - ip::basic_resolver_results::swap (0) | 2021.03.05 |