А>Вопрос: как можно организовать работу что бы не попадать на таймаут чтения
Я использую примерно такую схему:
std::string response;
ACE_Time_Value delta( 0, 100 );
ACE_Time_Value sleeptm( 5 );
for( ACE_Countdown_Time time_left( &sleeptm );
sleeptm > ACE_Time_Value::zero; time_left.update() )
{
read( response, 1 );
if( is_full_message( response ) )
break;
}
Реализация метода read( std::string &, size_t ) думаю не нужно писать.
Ну а что касается is_full_message( const std::string & ),
то здесь уже нужно смотреть с каким устройством общаешься, но найти что-нибудь можно всегда...
Попутный вопрос: насколько я понял из кода, то все это дело работает под *nix-ами, а под Windows
кому-нибудь удавалось заставить реактор перехватывать уведомления о поступивших данных в COM порте
( ACE_TTY_IO => ACE_Reactor => ACE_Event_Handler::handle_input( ACE_HANDLE ) )?
Если да, то поделитесь опытом. У меня ничего не вышло ни на ACE_Select_Reactor, ни на ACE_WFMO_Reactor.
Что и не удивительно-то