LINUX.ORG.RU

использование QThread примерчик


0

0

А может кто-нибудь кинуть простенький примерчик использования QThread с передачей информацииот от одного thread в главное окно и обратно... еще не знаю, может вопрос совсем глупо звучит... но что-то у мя не получается... уже об стенку бъюсь :))) хочу сделать textEdit в который будет отображать информацию из БД, переодически (1мин) обновляя ее, при этом все остальное приложение(главн окно) должно работать само по себе... а процесс чтения из БД быть в вечном цикле(неугомонная душа :))) )

я конечно понимаю, что могу все сам разобрать и научиться, но времени на это уйдет намного больше чем у мя есть :( а так, если у кого есть желание, можете пнуть в правильном направлении и я полечу, главное пинайте туда куда надо :))


А какие проблемы возникают? Какая версия QT? (недавно вышла 4.1.1, оч рекомендую). Как пытаешься передавать данные (сигнал/слот или разделяемые переменные)?

LestorN
()

если это Qt 4.x то смотрите в сторону QCoreApplication::postEvent()

// wbr

klalafuda ★☆☆
()

program.ui.h

#include <qthread.h>//многопоточность

volatile bool writetrue;//переменные которые будут видны в главном потоке или используй указатели

volatile int error_write;

class WriteToCom : public QThread { public:

void run() { //здесь твой код }

void stop() { stopped = true; } private: QString messageStr; volatile bool stopped; };

WriteToCom writeToCom;

void твоя программа::твоя функция() { writeToCom.start(); }

rh9
()

program.ui.h



#include <qthread.h>//многопоточность


volatile bool writetrue;//переменные которые будут видны в главном потоке или используй указатели

volatile int error_write;

class WriteToCom : public QThread {
public:

void run()
{ //здесь твой код }

void stop()
{
stopped = true;
}
private:
QString messageStr;
volatile bool stopped;
};


WriteToCom writeToCom;

void твоя программа::твоя функция()
{
writeToCom.start();
}

rh9
()
Ответ на: комментарий от rh9

Одна важная деталь: классы виджетов не являются реентерабельными, поэтому "напрямую" писать в QTextEdit из второго потока не следует, надо посылать сообщение с данными и в главном потоке его обрабатывать.
Подробнее:
http://linuxcenter.ru/lib/books/qt3/qt3_21.phtml#USINGQTSCLASSESINNONGUITHREADS

W98
()
Ответ на: комментарий от rh9

void твоя программа::твоя функция()
{
writeToCom.start();
}

запустить дочерний поток из основного - нет проблем. вопрос стоял в другом: как оповестить основной поток из дочернего о наступлении какого-то события. с учетом того, что основной поток естественно находится в цикле обработки событий и его нельзя вот так вот просто вызвать. именно для этих целей и был придуман PostEvent() что в Qt3 что в Qt4.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

ну можно без event
можно просто выставлять флаги в дочернем потоке
а вглавном потоке по таймеру их обрабатывать

rh9
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.