Windows: NativeSerialEnginePrivate::nativeSelect->function WaitForSingleObject returned WAIT_TIMEOUT : 258 . Warning! - Эти таймауты.
эти таймауты нужны:
1. При вызове метода waitForReadyRead(msecs) этим таймаутом будет параметр msecs, т.е. таймаут ожидания прихода данных (вообще)
2. При вызове метода read() - этим таймаутом будет величина charIntervalTimeout , т.е. таймаут ожидания прихода следующего символа
По истечении этих таймаутов будет в консоль сыпаться эти сообщения. Просто вырубить их и всё!
Значение 258 - это значение DWORD WAIT_TIMEOUT
Если закоментить строку #define NATIVESERIALENGINE_WIN_DEBUG
Вылазит 4 ошибки при компиляции.
D:/QSerialDevice_09092009_bugs_version_2300/qserialdevice/src/nativeserialengine_win.cpp:754: error: expected primary-expression before '}' token
D:/QSerialDevice_09092009_bugs_version_2300/qserialdevice/src/nativeserialengine_win.cpp:754: error: expected `;' before '}' token
D:/QSerialDevice_09092009_bugs_version_2300/qserialdevice/src/nativeserialengine_win.cpp:836: error: expected primary-expression before '}' token
D:/QSerialDevice_09092009_bugs_version_2300/qserialdevice/src/nativeserialengine_win.cpp:836: error: expected `;' before '}' token
Исправил + в аттач добавил последнюю "рабочую" версию.
Замечания:
1. В этой версии последний раз я тестировал ее под Windows , поэтому под *.nix могут вылезти какие нить неучтенные проблемы
2. При тестировании в виндах мне не удалось устранить баг, который заключается в том, что:
если настроить программы reader или sreader на прием/чтение данных на дефолтных настройках размером ~ >500 байт (например 1000 байт) - и с помощью программки writer записывать в порт на 1 байт больше (т.е. например 1001) - то почему-то утилитки reader или sreader прочтут только 1000 байт, и метод waitForReadyRead (для reader) или сигнал (для sreader) не отработает!!! Такое впечатление, что винда не успевает мониторить события !
Чтобы прочитался этот оставшийся байт - нужно утилитой writer записать в порт еще несколько байт (минимум еще 1), и тогда утилиты reader или sreader прочтут все байты (т.е. в нашем случае прочтут 2 байта)
Такое поведение наблюдается при приеме сразу большого кол-ва байт (более 500) у меня по крайней мере.
Но если утилитой writer передать не на 1 , а на большее кол-во байт (например на 2) больше (т.е. 1002) - то утилиты reader или sreader прочитают сначала 1000 а потом 2 байта.. т.е. все как надо...
ЗЫ: замучался я с виндой... ужос... был касяк с тем еще, что при получении реального кол-ва байт в приемном буфере после отработки события, т.е. вызове ClearCommError - эта функция не обновляла в структуре COMSTAT поле DWORD cbInQue - всегда получал я величину = 0 !! О_О ...
В общем с виндувсом одни проблемы