Re: как организовать лучше работу с COM портом по средствам
От: imironchik  
Дата: 20.08.08 10:29
Оценка:
А>Вопрос: как можно организовать работу что бы не попадать на таймаут чтения

Я использую примерно такую схему:


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.
Что и не удивительно-то
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.