Boost 라이브러리는 1.53 버전부터 코루틴이 정식으로 포함되었다. Boost 라이브러리 1.54 버전의 Asio에서는 코루틴을 Asio에서도 사용할 수 있게 되었다.

Asio에서 코루틴을 사용하기 위해서는 boost:asio::spawn을 사용한다.

 

Asio에서 비동기 I/O 함수를 사용할 때는 언제나 Asio의 비동기 함수를 호출하고, 이때 완료 함수를 등록 한다. 그리고 완료 함수가 호출에 의해 작업의 완료를 알게 된다.



boost::asio::spawn을 사용하면 코루틴에 의해 비동기 함수를 호출하면 호출한 곳으로 제어권을 넘긴 후 비동기 작업이 완료하면 비동기 함수 호출 이후 부분에 복귀하여 남은 작업을 처리한다.

아래는 boost::asio::spawn을 사용하여 비동기로 데이터를 보내는 코드이다.


 


< boost::asio::spawn을 사용하여 비동기로 데이터 보내기 >

 

코루틴을 사용해본 경험이 없다면 아마 위의 코드만으로는 잘 이해가 안될 것이다. 그러니 기존의 Chatting 서버를 boost::asio::spawn 사용 버전으로 만든 'ChattingTCPServer_spawn' 프로젝트를 꼭 보고 실행까지 해보기 바란다. boost::asio::spawn을 사용해서 코드가 이전에 비해서 줄어들어서 어렵지 않게 이해할 수 있을 것이다.


ChattingTCPServer_spawn.zip


 

 

<참조>

코루틴(coroutine) 관련 자료

http://devnote.tistory.com/223

 

Boost 라이브러리의 코루틴에 관한 글

C++에서도 coroutine & yield  http://gamedevforever.com/209

다시 한번 C++에서도 coroutin   http://www.gamedevforever.com/289

</참조>

 

<참조>

Boost 라이브러리의 asio::spawn 관련 예제 코드

http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/example/cpp11/spawn/

</참조>

 

저작자 표시
신고
by 흥배 2014.07.07 08:00