crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Работа с потоками
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
BRE Дата 30.10.2009, 9:16
 
Цитата(kuzulis @ 30.10.2009, 9:05) *
Цитата
Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения.

Но саму операцию чтения/записи в порт все-таки лучше вынести в отдельные потоки . ИМХО

Переформулирую: можно и вынести, но это не обязательно. ;)
Если необходимо передавать большие объемы данных - можно вынести, а если нужно передать короткую команда и получить короткий ответ - то можно и не выносить.
kuzulis Дата 30.10.2009, 9:05
 
Цитата
Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения.

Но саму операцию чтения/записи в порт все-таки лучше вынести в отдельные потоки . ИМХО
rcdimon Дата 29.10.2009, 23:55
 
Это информация по библиотеке QSerialDevice:


Очень полезная штука! Очень проста и удобна в освоении. Огромное спасибо авторам! Сделал на ней все, что мне нужно на несколько минут.
Litkevich Yuriy Дата 29.10.2009, 14:05
  В QxtSerialPort 1.2 реализована асинхронная работа с портом и потоки создавать не приходится. Просто по сигналам.
BRE Дата 29.10.2009, 11:20
  Это информация по библиотеке QSerialDevice:
http://www.forum.crossplatform.ru/index.ph...t=0&start=0

Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения.
rcdimon Дата 29.10.2009, 11:12
  Всем привет. Нужно написать программу для управления девайсом, подключенным к COM порту. Лучше всего работать с портом в асинхронном режиме, поэтому работу с ним советуют вынести в отдельный поток, как я и делаю. Но у меня нет опыта в написании многопоточных программ, поэтому возникли некоторые трудности.

Главный поток отвечает за GUI. Один поток отвечает за чтение порта, еще один за запись в порт- ведь чтение и запись могут происходить одновременно. Получается дескриптор порта должен быть доступен двум потокам.

Я открываю и настраиваю порт в главном потоке.

** main (**){
...
COMport = CreateFile(***);
...
}


Поток создаю с помощью QThread

class MyThread : public QThread
 {
     Q_OBJECT

 protected:
     void run();
 };

 void MyThread::run()
 {
     Тут все, что надо для записи в порт
 }


Но остается один вопрос- как все-таки передать COMport в поток MyThread. И как получить данные из потока, отвечающего за чтение из порта. Причем я думаю, что блокировка COMport, как разделяемого ресурса для потоков не нужна. Ведь они совершают неконфликтующие между собой действия- чтение и запись, которые могут происходить паралельно, ведь COM порт дуплексный.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 5:34