как организовать лучше работу с COM портом по средствам ACE
От: Аноним  
Дата: 20.08.08 07:11
Оценка:
День добрый!
Столкнулся с небольшой проблемой:
Использую ACE для работы с комп портом и тп.


.....
class CSerialHandler : public ACE_Event_Handler
{
public:
    int handle_input(ACE_HANDLE fd)
    {
    g_soResponse.clear();
    for (char ch = 0; oTTY.recv(&ch, 1) == 1; g_soResponse += ch ) {;}
    ACE_HEX_DUMP ( ( LM_DEBUG, g_soResponse.c_str(), g_soResponse.length(), ACE_TEXT("Response: ")) );
        return 0;
    }
};
.........
ACE_TTY_IO oTTY;
ACE_DEV_Connector oConnector;
oConnector.connect(oTTY, ACE_DEV_Addr(ACE_TEXT("/dev/ttyS1")));

ACE_TTY_IO::Serial_Params oParams;
oParams.baudrate = 9600;
oParams.readtimeoutmsec = 1000;
oParams.paritymode = "NONE";
oParams.databits = 8;
oParams.stopbits = 1;
oTTY.control(ACE_TTY_IO::SETPARAMS, &oParams);
.......


Проблема следующего плана: когда "приходит" handle_input я пытаюсь за раз все вычитать — вроде все ок. но когда я все вычитал(я об этом же не знаю) на следующей итерации пытаюсь вычитать и попадаю на тайматут чтения и потом уже только понимаю что все вычитано.

Вопрос: как можно организовать работу что бы не попадать на таймаут чтения
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.