![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
rcdimon |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Всем привет. Нужно написать программу для управления девайсом, подключенным к COM порту. Лучше всего работать с портом в асинхронном режиме, поэтому работу с ним советуют вынести в отдельный поток, как я и делаю. Но у меня нет опыта в написании многопоточных программ, поэтому возникли некоторые трудности.
Главный поток отвечает за GUI. Один поток отвечает за чтение порта, еще один за запись в порт- ведь чтение и запись могут происходить одновременно. Получается дескриптор порта должен быть доступен двум потокам. Я открываю и настраиваю порт в главном потоке.
Поток создаю с помощью QThread
Но остается один вопрос- как все-таки передать COMport в поток MyThread. И как получить данные из потока, отвечающего за чтение из порта. Причем я думаю, что блокировка COMport, как разделяемого ресурса для потоков не нужна. Ведь они совершают неконфликтующие между собой действия- чтение и запись, которые могут происходить паралельно, ведь COM порт дуплексный. |
|
|
BRE |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Это информация по библиотеке QSerialDevice:
http://www.forum.crossplatform.ru/index.ph...t=0&start=0 Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
В QxtSerialPort 1.2 реализована асинхронная работа с портом и потоки создавать не приходится. Просто по сигналам.
|
|
|
rcdimon |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 27.10.2009 Пользователь №: 1183 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Очень полезная штука! Очень проста и удобна в освоении. Огромное спасибо авторам! Сделал на ней все, что мне нужно на несколько минут. |
|
|
kuzulis |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения. Но саму операцию чтения/записи в порт все-таки лучше вынести в отдельные потоки . ИМХО |
|
|
BRE |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения. Но саму операцию чтения/записи в порт все-таки лучше вынести в отдельные потоки . ИМХО Переформулирую: можно и вынести, но это не обязательно. ![]() Если необходимо передавать большие объемы данных - можно вынести, а если нужно передать короткую команда и получить короткий ответ - то можно и не выносить. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 18.4.2025, 18:03 |