![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Гость_Alexei |
|
|||
Unregistered |
Итак, есть устройство (микроконтроллер ADAM, но это не суть важно), подключенное к последовательному порту, нужно связаться с ним и получить данные. Все это проходит нормально, это я сделал. Но есть досадная неприятность - когда пытаешься коннектиться к выключенному контроллеру, то программа зависает в бесконечном ожидании. Я узнал, что это нужно копать в направлении такого элемента функции CreateFile, как OVRELAPPED. Каким-то образом надо это организовать, чтобы при попытке соединения к выключенному контроллеру выдавалось сообщение и программа не завешивалась бы. Поискал я инфы по Сети и на этом форуме всплывала похожая проблема. Я столько вариантов перепробовал, но ничего не работает. Или наоборот, сообщение выдается даже и в том случае, когда устройство включено. Так все-таки, объясните, пожалуйста, кто может, как делается такая проверка. А то никаких представлений теперь нету.
Вот один из вариантов: if(hComm==INVALID_HANDLE_ VALUE) { ShowMessage("ERROR"); } Это я вставлял и перед настройкой параметров порта, и после команды WriteFile пробовал - не работает. Хотя в найденном материале оно так и использовалось. |
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Функция SetCommTimeouts устанавлмвает время ожидание. По умалчанию установленно 0, т.е. бесконечное, и программа будет зависать до получения данных.
P.S. Советую всю работу с портами производить из отдельного потока, чтобы программа не зависала. -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
Unregistered |
|
|||
Unregistered |
А как это делается-то? Где бы инфы почитать?
|
|||
|
||||
shedon |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Как делается, что ? Поток создать можно так
Читай MSDN Это сообщение отредактировал(а) shedon - 29.12.2003, 08:38 -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
||||||
|
|||||||
Unregistered |
|
|||
Unregistered |
Если еще сюда заглянешь, то вопрос. А ты уверен, что это сработает в моем случае? Что-то я не пойму вообще, как это использовать. И где тут обращение к Сом-порту. Или это надо делать после CreateFile?
|
|||
|
||||
shedon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Я же сказал, что работать с портами надо в отдельном потоке(в программе всегда есть хотя бы один интерфейсный поток который обрабатывает сообщения, нажатие кнопок и т.д. если создавать долгие процессы в интерфейсном потоке то программа не будет, в это время, откликаться на сообщения пользователя и системы, т.е. зависнет!!! и поэтому мы создаём параллельный поток для работы с портами), в MyFync я создаю поток из которого запускается функция WorkThreadFunc(), а в ней мы уже можем работать с портом. Для работы с портами в функцию WorkThreadFunc()
-------------------- Programming is like sex: One mistake and you have to support it your lifetime |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |