![]() |
|
|
![]()
|
|
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Почему - так? я перед циклом выставляю dwnumber_read_bytes = 1 и соответственно - жду первого пришедшего символа. Хотя, я тогда вообще перестал что-то понимать: как считать данные из порта, в цикле? Данные я запрашиваю порциям - в разных случаях по-разному. От 20 до 200 байт, в зависимости от того, что должен получить. И таймауты теперь уже меняю в процессе работы Для чтения большого объема выделяю общий буфер в 8Кб и заполняю его порциями по примерно 200 байт, чтение - в цикле. Dreamer_0x01, если Вас не затруднит, напишите, пожалуйста, как правильно получить данные из порта после отсылки команды? С учетом того что может прийти большой объем и чтение - порциям в цикле while? Заранее большое спасибо! Это сообщение отредактировал(а) Бугемот - 13.1.2006, 21:32 |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Еще раз. Если ты устанавливаешь таймаут заведомо больший, чем время, необходимое тебе для того, чтобы дождаться отклика, то и цикл тебе здесь никакой не нужен.
Если же таймаут все-таки меньший, то вот тогда как раз и нужен цикл, причем со счетчиком попыток чтения. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Бугемот |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Соответственно, операция чтения повесит поток на время таймаута?
ну это равносильно тому, что выставить таймаут. Причем мне кажется - с таймаутом надежнее. Цикл я использую для того, чтобы получить большой объем данных маленькими порциями |
||||
|
|||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
В общем, да. Именно поэтому я и предлагала анализировать количество попыток, а не делать одним единым большим таймаутом.
Я понимаю. надежность...не факт. Мне вот как раз кажется, что чем чаще контролиреушь ситуацию, тем лучше. Не затруднит, но пожалуйста, четко ответь на вопрос - ты знаешь, сколько символов должно прийти после запроса, или нет? От этого и будет зависеть алгоритм. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Нет, не знаю. Есть два варианта: 1. Когда запрашиваю смс-сообщения из телефона. Здесь теоретически до 20-25Кб данных может прийти 2. Когда посылаю сообщение - надо дождаться отклика. Максимум 50-70 символов. НО точно - не знаю |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
хорошо, тогда вопрос такой - как ты определяешь конец ответа твоего телефона?
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Бугемот |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Есть два варианта:
1. я знаю, что объем ожидаемых данных не превышает, например, 100 байт. ТОгда делаю так:
соответственно я жду 100 байт в течение 5 секунд. Кстати, попутно вопрос: если данные придут раньше - чтение завершится, или все же будет ждать 100 байт и завершится по таймауту? 2. Заранее не знаю, сколько придет данных, может и 100 байт, а может и больше. Тогда читаю блоками по 200 байт (максимальная длина одного сообщения + служебная информация)
ну и читаю данные до тех пор, пока они читаются. Вот так делаю |
||||
|
|||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Бугемот
У тебя только один выход из сложившейся ситуации - WaitCommEvent, и будешь знать что-как с уст-вом -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
это уже асинхронный режим. Мне он не подойдет: я отправляю sms-сообщение через телефон, т.е. реально оно в телефоне не сохраняется. Когда приходит ответ - в нем информация только о том, что сообщение отправлено. Ну и как теперь угадать - какое-же из двух моих отправленных сообщений - действительно отправлено? Вот и приходится ждать отлик сразу же после отправки! |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
WaitCommEvent можно и для ожидания отклика тоже использовать.
Ладно, погоди, щас до работы доеду, и оттуда напишу свой вариант. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Посмотрел еще раз ветку. Действительно, воспользуюсь вариантомDreamer_0x01, т.е. буду опрашиват порт 7 раз с таймаутом в секунду (например), ну или с таймаутом в полсекунды. И вынесу запись в отдельный поток. Получится отправка в среднем 10-15 сообщений в минуту, вроде пока должно хватить, хотя на пике явно будет нагрузка больше. Ну, это уже с заделом на будущее
Мне смысла нет использовать WaitCommEvent, т.к. пока не придет отклик, следующее сообщение посылать нет смысла. Я просто отклики друг от друга не отличу и не буду знать, какое же из двух сообщений действительно отправилось. |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Так блин, тебе никто не предлагает послать кучу запросов и ждать кучу откликов. Естественно, все делается последовательно.
Погоди до завтра, полный цейт-нод, ночую на работе - утром показ прибора руководству ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |