| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Проблема с ReadFile |
| Автор: Scalar 31.10.2005, 21:29 | ||
Шлю AT модему...
Посылаю любую команду- приложение висит ... |
| Автор: p0s0l 31.10.2005, 21:33 |
| Если ответ меньше 64 байт, то прога будет ждать, пока они не появятся... |
| Автор: Scalar 31.10.2005, 22:03 |
| p0s0l и как узнать размер ответа если он ещё не получен? Как тогда правильно ловить ответ модема? |
| Автор: Snowy 1.11.2005, 08:18 |
| По одному символу. А потом склеивать их в строку. |
| Автор: Гость_Unregistered 7.11.2005, 03:48 | ||
В вашем случае нужно настроить таймауты порта (структура TCOMMTIMEOUTS). также не забудте про TDCB, потому что устройство не ответит (или ответит не правильно) если настройки порта устройства и порта компьютера будут различны. Тогда можно проверять следующим образом:
Вызов функций - синхронный, а это значит, что функция вернет значение только если что-то будет во входящем буфере или если закончится таймаут отведенный на чтение. Есть еще один способ вернуть значение функции немедленно: поставить CommTimeouts.ReadIntervalTimeout:=MAXDWORD; но тут самому надо устанавливать задержки перед чтением (типа sleep(100)). Если у вас есть нормальная документация по модему - то этот вариант вам скорее всего не понадобиться. |
| Автор: Гость_Unregistered 7.11.2005, 04:01 |
| рекомендую: статья Олега Титова http://www.rs232.ru/doc002.html |
| Автор: Петрович 7.11.2005, 08:22 | ||
Для начала сойдет. Однако, не стоит заморачиваться с описанным там асинхронным вводом/выводом. Лучше использовать потоки. Тем более, что некоторая информация об асинхронном в/в приведенная в указанной статье, вызывает серьезные сомнения. |
| Автор: Unregistred 9.11.2005, 09:18 |
| Петрович, согласен что описание асинхронного в/в оставляет желать лучшего, но в остальном тема раскрыта неплохо. Использование асинхронного вызова целесообразно в случае асинхронного обмена с самим внешним устройством. Потоки в этом случае только усложнят дело. |
| Автор: Петрович 9.11.2005, 10:38 | ||
По моему мнению так: Если инициатором обмена является перефирийное устройство, тогда возможно асинхронный в/в будет удобнее. А если речь идет о модеме, то тут обычно реализуется диалог - команда-ответ, команда-ответ. Такое гораздо проще строить в потоке. Но, это дело вкуса. |
| Автор: AKN 12.11.2005, 18:30 |
| Послушай, а почему бы компонентой не воспользоваться? быстро и без гимору.... |
| Автор: Петрович 12.11.2005, 18:43 | ||
Правильно. Главное только не ошибиться с выбором компонента. Некоторые бывают с ошибками написаны |
| Автор: Alex 12.11.2005, 20:36 | ||
Так по советуйте, в котором нет ошибок |