Первать FileRead

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Первать FileRead

Сообщение still » 21.10.2015 12:32:59

Читаю FileRead в потоке с устрофства /dev/ttyUSB0. (USB модем)
Пока данные есть, все хорошо. Когда данных нет, исполнение потока останавливается на FileRead и далее не выполняется, до появления данных.
Подойдет любой способ прерывания ожидания:
1. Callback - как?
2. Таймаут - как?
3. Проверить перед чтением наличие данных. Через FileSeek(h,0,2) возвращает -1.

Не подойдет:
1. Убийство потока. Крайне не желательно.

Платформа Linux.

Добавлено спустя 2 часа 43 минуты 57 секунд:
Ладно.
Пока решил вопрос тем что сам же в порт и пишу, провоцируя очередное чтение, и выхожу по флагу Terminate.
Однако, вопрос остается. Если кто боролся с таким - поделитесь.
Аватара пользователя
still
новенький
 
Сообщения: 40
Зарегистрирован: 01.10.2015 11:11:48

Re: Первать FileRead

Сообщение Alexx2000 » 22.10.2015 09:54:53

Использовать select, poll (в FPC функции fpSelect, fpPoll). В интернете полно примеров для C, без проблем переносится на FPC.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Первать FileRead

Сообщение Mikhail » 22.10.2015 10:28:48

still писал(а):Читаю FileRead в потоке с устрофства /dev/ttyUSB0. (USB модем)
Пока данные есть, все хорошо. Когда данных нет, исполнение потока останавливается на FileRead и далее не выполняется, до появления данных.
Подойдет любой способ прерывания ожидания:
1. Callback - как?
2. Таймаут - как?
3. Проверить перед чтением наличие данных. Через FileSeek(h,0,2) возвращает -1.

Не подойдет:
1. Убийство потока. Крайне не желательно.

Платформа Linux.

Добавлено спустя 2 часа 43 минуты 57 секунд:
Ладно.
Пока решил вопрос тем что сам же в порт и пишу, провоцируя очередное чтение, и выхожу по флагу Terminate.
Однако, вопрос остается. Если кто боролся с таким - поделитесь.

Если просто нужно завершить, то надо закрыть файл и функция FileRead завершится с ошибкой, во всяком случае в Windows это так делается.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Первать FileRead

Сообщение still » 22.10.2015 16:10:21

Если просто нужно завершить, то надо закрыть файл и функция FileRead завершится с ошибкой, во всяком случае в Windows это так делается


Сожалею, но это не так. Чтение остается висеть, даже при закрытии файла. Проверил в разных позах.

Добавлено спустя 18 минут 32 секунды:
Код: Выделить всё
Использовать select, poll (в FPC функции fpSelect, fpPoll). В интернете полно примеров для C, без проблем переносится на FPC.


Прошу чуть подробнее, если вы с этим работали.
Правильно ли я понял:
Перед чтением я вызываю fpPoll передав в него некую структуру pollfd содержающу handle файла полученного при FileCreate? После таймаута чтение завершится с ошибкой в случае отсустввия данных. Так?
Аватара пользователя
still
новенький
 
Сообщения: 40
Зарегистрирован: 01.10.2015 11:11:48


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

Рейтинг@Mail.ru