Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Проблема, коллеги. Или, к слову о передаче данных. |
Автор: Гость_Alexei 26.12.2003, 09:50 |
Итак, есть устройство (микроконтроллер ADAM, но это не суть важно), подключенное к последовательному порту, нужно связаться с ним и получить данные. Все это проходит нормально, это я сделал. Но есть досадная неприятность - когда пытаешься коннектиться к выключенному контроллеру, то программа зависает в бесконечном ожидании. Я узнал, что это нужно копать в направлении такого элемента функции CreateFile, как OVRELAPPED. Каким-то образом надо это организовать, чтобы при попытке соединения к выключенному контроллеру выдавалось сообщение и программа не завешивалась бы. Поискал я инфы по Сети и на этом форуме всплывала похожая проблема. Я столько вариантов перепробовал, но ничего не работает. Или наоборот, сообщение выдается даже и в том случае, когда устройство включено. Так все-таки, объясните, пожалуйста, кто может, как делается такая проверка. А то никаких представлений теперь нету. Вот один из вариантов: if(hComm==INVALID_HANDLE_ VALUE) { ShowMessage("ERROR"); } Это я вставлял и перед настройкой параметров порта, и после команды WriteFile пробовал - не работает. Хотя в найденном материале оно так и использовалось. |
Автор: shedon 26.12.2003, 11:37 |
Функция SetCommTimeouts устанавлмвает время ожидание. По умалчанию установленно 0, т.е. бесконечное, и программа будет зависать до получения данных. P.S. Советую всю работу с портами производить из отдельного потока, чтобы программа не зависала. |
Автор: Unregistered 27.12.2003, 03:49 |
А как это делается-то? Где бы инфы почитать? |
Автор: shedon 27.12.2003, 08:13 | ||||||
Как делается, что ? Поток создать можно так
Читай MSDN |
Автор: Unregistered 28.12.2003, 05:05 |
Если еще сюда заглянешь, то вопрос. А ты уверен, что это сработает в моем случае? Что-то я не пойму вообще, как это использовать. И где тут обращение к Сом-порту. Или это надо делать после CreateFile? |
Автор: shedon 29.12.2003, 09:03 | ||||
Я же сказал, что работать с портами надо в отдельном потоке(в программе всегда есть хотя бы один интерфейсный поток который обрабатывает сообщения, нажатие кнопок и т.д. если создавать долгие процессы в интерфейсном потоке то программа не будет, в это время, откликаться на сообщения пользователя и системы, т.е. зависнет!!! и поэтому мы создаём параллельный поток для работы с портами), в MyFync я создаю поток из которого запускается функция WorkThreadFunc(), а в ней мы уже можем работать с портом. Для работы с портами в функцию WorkThreadFunc()
|