crossplatform.ru

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

> Работа с потоками, Обмен данными с потоками
rcdimon
  опции профиля:
сообщение 29.10.2009, 11:12
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


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

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

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

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


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

class MyThread : public QThread
{
     Q_OBJECT

protected:
     void run();
};

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


Но остается один вопрос- как все-таки передать COMport в поток MyThread. И как получить данные из потока, отвечающего за чтение из порта. Причем я думаю, что блокировка COMport, как разделяемого ресурса для потоков не нужна. Ведь они совершают неконфликтующие между собой действия- чтение и запись, которые могут происходить паралельно, ведь COM порт дуплексный.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
kuzulis
  опции профиля:
сообщение 30.10.2009, 9:05
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Цитата
Потоки можно и не использовать, библиотеке может асинхронно сообщать тебе с помощью сигнала, что есть данные для чтения.

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

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.12.2021, 6:45