![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| programmaker |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Есть задача и я никак не могу ее решить.
исходные данные: Есть один ком порт. К нему подключен ЖПС модем. Есть удаленное устройство. К непу подключен такой же модем. Задача с моим алгоритмом решения: 1. Открываем порт 2. Пишем в него команду соединения модемов 3. Ждем пока модем ответит "коннект" 4. Закрываем порт 5. Открываем его же, но с другими параметрами 6. Программа работает в штатном режиме (до появления модемов все работало отлично - при прямом подключении компа и девайса). вот код (сверху вниз) а) Поток в котором происходит анализ работы порта до соединения модемов
б)инит
в)работа порта в режиме "пока соединение не установлено"
г) новое открытие порта с новыми параметрами
если я избавляюсь от потока, то все работает, но программа висит до установления коннекта, а это недопустимо в той последовательности, которая поисана выше (код) при закрытии порта и новом открытии хендл открытого порта меняется я так понимаю, что проблемма именно в этом, но как ни бьюсь - не выходит у меня каменный цветок. подскажите что я не так делаю ато надоело оправдываться и говорить, что вот вот все будет готово |
||||||||
|
|||||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Хэндл конечно меняется, но непонятно, почему это должно мешать?
Еще непонятно зачем надо переоткрывать порт? Если только для включения OVERLAPPED режима, то это лишнее - можно его включить сразу. И самое главное, непонятно что именно не работает? |
|||
|
||||
| programmaker |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
именно для включения оверлапед режима. я делаю: 1. открытие порта 2. запись в порт (atd*******) 3. чтение из порта пока не прийдет ответ о подключении 4. закрытие порта 5. открытие порта в штатном режиме (с оверлаппедом) если в потоке - не срабатывает ивент на чтение-запись если без потока, то срабатывает как поток на это повлиял? |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Включите OVERLAPPED сразу, и не надо ничего переоткрывать
|
||||
|
|||||
| programmaker |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Вот полный код именно этого девайса.
(без модемов) Добавлено через 6 минут и 54 секунды С этим кодом при прямом подключении девайса к компу обмен идет автоматически (там в ядре программы черт ногу сломит, но работает). Если добавляю модемную часть без потока - тоже идет, но программа висит до коннекта модемов. Если добавляю модемную часть в потоке - не идет обмен между девайсом и компом (открытый второй раз порт не реагирует на ивенты). Если пытаюсь просто открыть порт и записать в него что-то - выдает ошибку (какую уже и не помню). Слишком долго я с этим бьюсь. Присоединённый файл ( Кол-во скачиваний: 7 )
DevComm.cpp 6,87 Kb |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
В сорце не нашел собственно ожидания на m_osRead.hEvent, где то оно спрятанно. Вот видимо там и отвалилось
И еще - если на момент вызова ReadFile в буфере будут данные, то они могут быть немедленно возвращены из ReadFile'а, и евент вообще не взведется. Так что вот тут -
Добавлено через 1 минуту и 31 секунду Кстати, обнулять timeout'ы тоже не стоит - будет немедленно возвращаться с пустым буфером |
|||
|
||||
| programmaker |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
как поток мог повлиять на работу с портом?
без потока ведь все работает... |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Введением дополнительной задержки перед ReadFile (на время создания потока и его запуск). От порта уже успело что то придти, и ReadFile завершился немедленно (и успешно). На что ваша программа не расчитанна
|
||||
|
|||||
| programmaker |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Перед ReadFile от порта ничего не приходит. К порту подключен модем, который первый ответ дает секунд через 7-10 после WriteFile. После ReadFile порт закрывается и открывается заново с OVERLAPPED режимом. |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Бесы! Попробуй все же проверять, что возвращает ReadFile. Других дыр пока не вижу |
|||
|
||||
| programmaker |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
dw= 1, что означает "Неверная функция" как это может быть и что с этим сделать надо? |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| programmaker |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
извиняюсь за грубость, но В РОТ МНЕ НОГИ!!!
изменил инит девайс на
и все заработало но
вешает программу до появления события. можно ли как-нибудь от этого избавиться? |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| programmaker |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
А если я избавлюсь от wait..., то как мне отследить приход по readfile? |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |