boost asio 정리 - 1 기본동작
Program Lang./C++ 2017. 5. 11. 12:001. 목적
boost asio를 이용해서 IPTuner를 구현하는 과정에서 삽질한 내용을 정리한다. 국내 블로그들에는 정리가 잘 되어 있지 않는 것 같다. 따라서 stackoverflow등 여러 곳에서 참고한 내용을 기반으로 여기에 정리한다.
2. 코드 설명
정리-1부터 하나씩 기능을 추가해 가면서 고찰해 보도록 한다. 일단 아래 코드는 가장 간단한 예제이다. CTest라는 객체를 하나 생성하고 io_service를 start 시키는 코드이다.
여기서 자세히 봐야 할 부분은 io_service가 호출되면 아래 예제는 아래와 같은 특징을 갖는다.
main() 함수에서 키보드 입력해도 io_service의 handler함수인 printerHandler함수가 완료되기 전까지 block된다.
즉, loop가 10번까지 돌 때까지 main()함수의 동작은 io_service가 call되는 시점부터 block된다.
loop가 10번 돌고나면 std::cin.get()함수에서 멈쳐있다.
여기서 좀 더 고찰해봐야 할 부분이 io_service start 호출 후에 main()함수 부분이 block되지 않고 User로부터 계속 응답을 하는 것이 필요하다. 또한 io_service는 일반적으로 asynchronization 동작에서 사용하는 것으로 이 예제로 모든 것을 커버하기에는 어렵다. 주제별로 하나씩 고찰해 본다.
3. 실행결과
printerHandler가 동작 중일 때, Enter키를 강제로 두번 때려봤다. 예상되로 main()함수는 끝나지 않는다. 그리고 shell prompt는 두 번 Enter키를 입력한 결과로 printerHandler가 완료된 후에 결과를 출력하는 것을 볼 수 있다.
4. 정리
io_service start/poll이 호출되면 post에 정의된 callback함수가 완료될 때까지 io_service를 호출한 thread에서 block되는 것이 기본동작이다. start와 poll의 차이에 대해서는 최홍배님이 저술한 책 9장에 관련 내용이 정리되어 있다. 참고하시면 될 듯하다.
'Program Lang. > C++' 카테고리의 다른 글
boost asio - 3 (multi-thread 동작 고찰) (0) | 2017.05.12 |
---|---|
boost asio 정리 - 2 (io_service single thread 처리) (0) | 2017.05.11 |
[Basic] 클래스 상속 및 가상함수, 순수가상함수 정리 (0) | 2017.04.26 |
[Basic] 맴버변수의 상수, 정적 속성, 상수와 정적변수 동시적용 시, 상수 맴버 함수 정리 (0) | 2017.04.26 |
[Basic] 생성자 호출 정리 (0) | 2017.04.26 |