crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Потоки, Как организовать потоки
ALeXUI
  опции профиля:
сообщение 27.11.2012, 16:11
Сообщение #1


Студент
*

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

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




Репутация:   0  


Здравствуйте, возникла слдеующая проблема...
Моя программа, прошивает плату по com порту, отправляя определенные пакеты, и если в момент прошивки, зажать гллвное окно или начать его передвигать по рабочему столу, прошивка останавливается, и отменяется платой т.к за определнное время не поступил нужный пакет.
В связи с этим возник вопрос как это лучше реализовать?
Есть варинат сделать два потока - один будет отвечать за gui (главный виджет который выводит информацию от других классов), и второй, который занимается сборкой и отсылкой пакета.
Есть ли ещё какие-нибудь варианты?

Много почитал, про потоки, но полной ясности так и нет) Есть не плохой приер в examples (Mandelbrot), там нечто похожее реализовано, но что-то всё равно не совсем ясно. Может подскажите что ещё, возможно на более простом примере.

Для лучшего понимания решил попробывать напистаь простую программу, котрая считывает каждую секунду число из файла, и отправляет в главный класс, который выводит все на форму в техтэдит. При зажимании мышкой окна, зависание происходит не сильное, но думаю если организовать все через потоки, его вообще не будет. Не могли бы Вы пояснить, на таком простом примере, как это лучше организовать.
Заранее спасибо=)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mezmay
  опции профиля:
сообщение 29.11.2012, 21:02
Сообщение #2


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

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

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




Репутация:   1  


Для этой задачи совсем не обязательно использовать дополнительный поток, если данные у тебя отсылаются в цикле, то можно сделать так:
for(int i=0; i<n; i++)
{
    sendDataByteToDevice(...);
    qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
}
То есть обрабатывать системные сообщения между отправками пакетов.

Но если хочешь освоить потоки, то тебе подойдет другой простой вариант:
1. Создаешь класс, унаследованный от QThread (лучше с помощью встроенного в среду разработки мастера):
mythread.h:
//Переопределяешь виртуальный метод run
class MyThread : public QThread
{
public:
     void run();
};
}

mythread.cpp:
 void MyThread::run()
{
    for(int i=0; i<n; i++)
        sendDataToDevice();    
}


Создаешь в основном GUI-потоке объект этого класса:
    MyThread thread;

И запускаешь поток:
    thread.start();

Обрати внимание, что поток запускается с помощью метода start(). Ну и время жизни переменной thread должно быть достаточным для выполнения потока

Сообщение отредактировал mezmay - 29.11.2012, 23:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 0:25