Tutorial 1. sync_timer

Programming/Boost asio 2015. 2. 4. 22:58

다음 내용에 기반합니다. 


http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/tutorial/tuttimer1.html


시작하기에 앞서, 환경을 구성한다.

boost windows prebuilt 를 받아 적당한 경로에 준비시켜 두었으며,

그 적당한 경로를 Project > Properties 에서 include header 설정 해두었고, 



마찬가지로 lib 파일의 경로도 잡아준다. 




lib 파일의 경로는 잡아줬지만, 실제 링킹되어야 하는 파일명은 dependencies 에 지정하지 않은 상태다.

직접 링크에러가 날때마다 properties 에 추가하거나, pragma comment 로 소스코드에서 linking 할 수 있는데, 

편의상 소스코드에 넣었다.


sync_timer 소스코드는 다음과 같다. 



첫 튜토리얼 답게 굉장히.. 간단하다.

그냥 asio 의 deadline_timer 를 이용, 생성시 지정한 시간만큼 대기하다 종료하는 프로그램.

deadline_timer 의 wait() 함수는 지정된 시간이 지나기 전까지 리턴되지 않는다.


io_service 라는 생소한 클래스와 deadline_timer 라는 녀석이 있는데, 

deadline_timer 는 그냥 timer 기능을 제공하는 녀석이구나 정도로 쉽게 이해가 갈텐데, 

이 녀석이 사용하는 io_service 라는 클래스가 앞으로도 상당히 자주 보게될 클래스. 

I/O 기능을 제공한다 - 라고 튜토리얼에서는 소개하고 있는데, 단독으로 사용되는 경우는 없고,(아는한) 이 예의 deadline_timer 같은 io_object 와 결합이 되어 사용된다. 


IO_SERVICE 

> io_object 로부터 시작 요청을 받으면 OS 와 io 동작을 제공해주는 클래스. 

sync 의 경우에,

시작함수 (initiating function) 가 호출된 스레드에서 I/O 를 수행한 후 리턴


async 의 경우에, 

io_object 의 시작 함수가 (initiating function) 호출되면 io_object 에 지정된 io_service 가 OS 영역-정확히는 아니지만 이렇게 이해해도 큰 무리가 없다고 boost 개발자가 설명한바있다..(로 들렸다)-에 work 라는 객체와 핸들러를 함께 전달하여 queuing 해뒀다가, io_service.run() 이 호출되면 OS 로 실제로 요청 동작을 실행하고, 

OS 로부터 io_service 로 완료 알림이 오면 io_service 는 생성했던 work 객체와 handler 를 dequeue 하여 핸들러를 호출한다. 


실행결과는 - 지정한 5초동안 아무 반응이없다가 hello world 가 출력되고 프로그램이 종료되는 것이다.





'Programming > Boost asio' 카테고리의 다른 글

Tutorial 5. Synchronising handlers in multithreaded programs  (0) 2015.04.11
Tutorial 4. member function handler  (0) 2015.03.17
Tutorial 3. Binding arguments to a handler  (0) 2015.03.15
Tutorial 2. async_timer  (0) 2015.03.14
0. 소개  (0) 2015.02.02