0
다음은 내 코드입니다.단일 스레드에서 asio :: async_write를 사용할 때 "요청한 리소스가 사용 중입니다"
boost::asio::async_write(*serialPort, boost::asio::buffer(*something),handler);
boost::asio::async_write(*serialPort, boost::asio::buffer(*something2),handler);
상기 코드가 에러가 두 번째 줄에 "요청 된 리소스를 사용중인"얻을 (비동기 스트림은 직렬 포트이다). 하지만 스트림을 tcp 소켓으로 변경하면 everthing이 정상적으로 작동합니다. 왜?
이러한 비동기 작업을 이러한 방법으로 사용할 수 없다는 것을 알았지 만 첫 번째 코드는 하트 비트 패키지 일 수 있으며 두 번째 줄은 정기적으로 전송되지 않는 패키지 일 수 있습니다. 그리고 이러한 send 작업 버퍼는 동시에 수집 할 수 없습니다. 단일 스레드 (또는 다중 스레드)에서 이러한 비동기 작업을 동기화하는 방법이 있습니까?
, tcp를 쓰기 동기 때문에 완료 할 가능성이 높습니다보기 OS는 소켓에 대해 더 큰 버퍼를 사용합니다. 단일 쓰기가 작업을 완료 할 수 있도록 두 버퍼를 병합하기 만하면됩니다. –
ASIO로 비동기 I/O를 수행하는 방법을 연구하십시오. 하나의 비동기 작업을 시작하여 완료 콜백을 제공해야 다음 콜을 할 수 있습니다. – rustyx