Russian Qt Forum

Qt => Вопросы новичков => Тема начата: bixbit от Сентябрь 05, 2011, 01:54



Название: [РЕШЕНО] Вызов потока для функции класса
Отправлено: bixbit от Сентябрь 05, 2011, 01:54
Доброго времени суток

Есть класс
Код:
#ifndef TEST_H
#define TEST_H
#include<QtGui>
#include<windows.h>
#include"ui_main.h"
#include"thread.h"
class Test: public QDialog, public Ui::Dialog
{
Q_OBJECT
public:
    Test();
private slots:
    void on_pushButton_COnnector_clicked();
    void on_lineEdit_returnPressed();
    void on_pushButton_sender_clicked();
public:
    void checker();
//(в функии использовается обращение к объектам формы)

};
#endif

создаю класс для потока
Код:
#ifndef THREAD_H
#define THREAD_H
#include"test.h"
class Thread: public QThread
{
    Q_OBJECT
public:

    Thread;
    void run();
};

#endif // THREAD_H
main:
Код:
#include<QtGui>
#include"test.h"
int main(int argc, char ** argv)
{
    QApplication app(argc,argv);
    Test * test1 = new Test;
//
// вызов потока
//
    return app.exec();
}

так вот. Как для
Код:
test1->checker();
вызвать поток


Название: Re: Вызов потока для функции класса
Отправлено: niXman от Сентябрь 05, 2011, 02:16
что значит "вызвать поток"? выполнить функцию в потоке?


Название: Re: Вызов потока для функции класса
Отправлено: ecspertiza от Сентябрь 05, 2011, 09:11
Если нужно одну ф-цию выполнить в потоке, глянь в сторону QtConcurrent::run

пример из ассистента

Код:
void someFunction(int arg1, double arg2);
QFuture<void> future = QtConcurrent::run(boost::bind(someFunction, 1, 2.0));

ну или без параметров

Код:
void foo();
QFuture<void> future = QtConcurrent::run(foo);

если нужно будет ожидание, то используй

Код:
future.waitForFinished()


Название: Re: Вызов потока для функции класса
Отправлено: bixbit от Сентябрь 05, 2011, 19:40
Спасибо, ecspertiza
Именно QtConcurrent мне и был нужен, намного проще чем QThread
только пришлось вызвать её из класса т. к. функция обращалась к форме
Код:
void Test::go()
{
    QtConcurrent::run(this, &Test::parser);
}