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 менее ресурсоемкий, проще в отладке (и вообще
симпатичнее);
- вариант с тредами предпочтительнее, когда логика программы требует
многозадачности внутри программы.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]