2014-09-25 2 views
0

저는 (다른 것들 중에서) 자식 프로세스를 생성하고 stdout을 경청하여 알림을 수신하는 프로그램을 작성했습니다. 이 프로세스 간 통신 메커니즘은 훌륭하지만 교착 상태로 고민하고 있습니다.Boost.Asio : 사용자 정의 AsyncReadStream을 작성하는 방법?

나는 내 프로그램의 다른 부분에서 이미 네트워킹 목적으로 사용하고있는 Boost.Asio와 Proactor Pattern 구현을 사용하여 (주로) 단일 스레드로 만드는 프로그램을 만들 수 있다고 생각했습니다. 그렇게함으로써 더 이상 스레드 동기화에 신경 쓰지 않아도됩니다.

내 생각 엔 asio :: async_read _ *() 함수와 함께 사용할 수있는 사용자 정의 AsyncReadStream 유형 (Windows의 ReadFile()을 스레드라고 부름)을 작성해야한다는 것입니다. 내 문제는 AsyncReadStream 개념의 async_read_some() 멤버 함수를 구현하는 방법을 모른다는 것입니다. 함수가받는 MutableBufferSequence 참조로 무엇을해야합니까?

올바른 방법입니까? 그렇다면 async_read_some()을 어떻게 구현해야합니까? 아니면 올바른 방법이 아니며 전체 맞춤 서비스를 작성하는 것 외에 다른 선택의 여지가 없습니까?

+0

왜'asio :: windows :: random_access_handle' 등을 사용할 수 없습니까? [이 예제] (http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/example/cpp03/windows/transmit_file.cpp)를보십시오. –

+0

@IgorR. 프로세스의 표준 출력을 검색하는 데 사용되는 익명 파이프는 무분별하게 액세스 할 수 없으므로 windows :: random_access_handle이 필자의 필요에 맞지 않습니다. 익명 파이프를 지원하지 않기 때문에 windows :: stream_handle을 사용할 수 없습니다 ([here] (http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/overview/windows 참조). /stream_handle.html)). – floriang

+0

Linux 및 Mac에서 [stream_descriptor'] (http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/reference/posix__stream_descriptor.html)를 사용하여이 작업을 수행했습니다. Windows에서 작동하지 않습니까? –

답변

0

파이프를 통한 프로세스 간 통신은 Boost.Process에 구현됩니다. 라이브러리는 Boost의 일부가 아닙니다.

관련 문제