[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: QextSerialPort и потоки



On Tue, Jul 17, 2007 at 08:44:13AM +0300, pm2 wrote:
> Пишу программу, которая должна забирать 
> данные с приборов по последовательному 
> порту (8 цифровых датчиков веса 
> производства HBM, если это важно). Для 
> общения с портом используется QextSerialPort. 
> Чтобы ожидание ответов не тормозило всю 
> программу, создан второй поток 
> (производный от QThread). В нём кроме порта 
> также создаётся QTimer, сигнал от которого 
> собственно и вызывает функции опроса. 
> Оба объекта создаются уже в функции run(), 
> которая, судя по документации, и должна 
> выполняться в отдельном потоке. 
> Заканчивается она вызовом exec(), чтобы 
> сигналы от таймера обрабатывались. И всё 
> было бы нормально, поток когда надо 
> запускается, завершается, но ожидание 
> ответов всё равно тормозит весь процесс. 
> В чём может быть причина, и как это 
> исправить? Попробовал собрать эту же 
> программу под оффтопиком (XP SP2) - там не 
> тормозит, всё чудесно работает. QT 4.3.0 
> ставил из исходников в /usr/local (если что не 
> так, могу и пересобрать), система - Sarge. 
> Если пройдут вложения - в них исходник 
> этого модуля.


Здравствуйте!
Передо мной стоит почти такая же задача. Опыта программирования у меня
нет, вот пытаюсь разобраться как делать. Я хочу в цикле отрашивать
открытые com порты через select(system call). Если что-то пришло, то
прочитать и снова в цикл. Ожидание чтения с порта хочу побороть
установкой флага FNDELAY на на открытый дескриптор порта:
(fcntl(fd, F_SETFL, FNDELAY))...  
  У вас используются треды, вот я и думаю, будет ли работать мой
вариант без тредов и не будет ли он тормозить сичтему?

-- 
Хочешь быть пилотом- будь им!



Reply to: