Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] COM-port и таймауты 30.09.03 17:44 Число просмотров: 933
Автор: vh <Дмитрий> Статус: Member Отредактировано 30.09.03 17:55 Количество правок: 2
|
Всем привет!
Проблема такая:
Использую компорт для общения со своим устройством (реального времени). Программирую из под Windows.
Использую WinApi, причем вроде правильно, все делаю как описано здесь
http://morgeyz.narod.ru/comlpt.htm
Проблема возникает с таймаутами.
Устанавливаю таймаут при каждой попытке чтения N-ого кол-ва символов.
Использую стандартную вещь, для их установки:
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 0;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = elapse;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts( m_hIDComDev, &CommTimeOuts );
где m_hIDComDev - хэндл порта
Если я правильно понял таймауты, но при такой расстановке, она должна ждать кол-во запрошенных символом в течении промежутка времени равного elapse.
Но. судя по всему такого не происходит, ибо не работает. А когда я перед чтением делаю чтото вроде: Sleep( 100 ) все работает на ура. Только не нравится мне это. Хочу разобраться. Это важно, так как проект очень серьезный.
спасибо.
p.s. DCB настраиваю вот так
dcb.DCBlength = sizeof( DCB );
GetCommState( m_hIDComDev, &dcb );
dcb.BaudRate = nBaud;
dcb.ByteSize = 8;
dcb.fBinary = 1;
dcb.fParity = 0;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = false;
dcb.fTXContinueOnXoff = 1;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fNull = 0;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = 0;
dcb.wReserved = 0;
dcb.StopBits = ONESTOPBIT;
|
- [Win32] COM-port и таймауты - vh 30.09.03 17:44 [933]
|
|
|