[boost.Asio tutorial] Using a timer asynchronously

2019. 8. 13. 13:16PL/C++

이전 튜토리얼을 수정해서 비동기 callback 함수 기능을 하는 프로그램을 작성하려고 한다. 콜백 함수란 비동기 operation을 완료한 후 수행된다. 비동기 wait 함수는 deadline_timer::async_wait() 함수를 사용한다. 인자로는 콜백 함수의 주소값을 넘겨준다. 

 

그리고 가장 중요한 것이 반드시 io_service::run() 함수를 실행시켜 콜백 함수 동작을 보장받게 한다. 만일 호출되지 않는다면 비동기 wait가 완료된 이후 호출되지 않는다. io_service::run() 함수는 비동기 wait가 완료되기 전까지 지속된다

 

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

using namespace std;

void print(const boost::system::error_code &) {
	cout << "hello world\n";
}

int main(void) {
	boost::asio::io_context io;
	boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
	t.async_wait(&print);
	
	io.run();
	return 0;
}

 

[출처] https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/tutorial/tuttimer2.html