crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 27.10.2021, 0:41