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

Re: QextSerialPort и потоки



Tigar wrote:
Передо мной стоит почти такая же задача. Опыта программирования у меня
нет, вот пытаюсь разобраться как делать. Я хочу в цикле отрашивать
открытые com порты через select(system call). Если что-то пришло, то
прочитать и снова в цикл.

всё правильно

Ожидание чтения с порта хочу побороть
установкой флага FNDELAY на на открытый дескриптор порта:
(fcntl(fd, F_SETFL, FNDELAY))...

оно необязательно - если у вас есть данные для чтения (о чем известит select), то read не блокирует.
оно работает так:
- есть данные - читаем их (даже если и меньше, чем запрошено: если от устройства пришел 1 байт, а мы ждем два - read вернет 1);
- нет данных - ждем.

http://lists.debian.org/debian-russian/2001/06/msg00043.html

обычно нужно использовать O_NONBLOCK _или_ select перед чтением (или многозадачность - например треды).


  У вас используются треды, вот я и думаю, будет ли работать мой
вариант без тредов и не будет ли он тормозить сичтему?

имхо:
- вариант с select менее ресурсоемкий, проще в отладке (и вообще симпатичнее); - вариант с тредами предпочтительнее, когда логика программы требует многозадачности внутри программы.



Reply to: