Russian Qt Forum
Май 03, 2024, 16:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Вызов потока для функции класса  (Прочитано 4495 раз)
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();
вызвать поток
« Последнее редактирование: Сентябрь 05, 2011, 19:44 от bixbit » Записан
niXman
Гость
« Ответ #1 : Сентябрь 05, 2011, 02:16 »

что значит "вызвать поток"? выполнить функцию в потоке?
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Сентябрь 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()
Записан
bixbit
Гость
« Ответ #3 : Сентябрь 05, 2011, 19:40 »

Спасибо, ecspertiza
Именно QtConcurrent мне и был нужен, намного проще чем QThread
только пришлось вызвать её из класса т. к. функция обращалась к форме
Код:
void Test::go()
{
    QtConcurrent::run(this, &Test::parser);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 22.