Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: bixbit от Ноябрь 09, 2013, 21:22



Название: QtConcurrent для функции с параметрами и QFuture
Отправлено: bixbit от Ноябрь 09, 2013, 21:22
Есть функция
Код:
void Test::go(QFutureInterface<void> &future,int &test)
{
        static const int iterations = 10*1000*1000;
        for (int i=test; i < iterations; i++) {
            if (future.isCanceled())
                break;

            future.setProgressValue(100.0*i/iterations);

            QObject *object = new QObject;
            object->setObjectName("QObject");
            delete object;
        }
}
Пытаюсь вызвать её:
Код:
void Test::on_pushButton_clicked()
{
    QFutureWatcher<void> * watcher = new QFutureWatcher<void>();
    QObject::connect(watcher, SIGNAL(progressValueChanged(int)), ui->progressBar, SLOT(setValue(int)));

    int num=10;
    QFuture<void> future;
    future = QtConcurrent::run(this,&Test::go,num);

    watcher->setFuture(future);

}
Компилятор выдает
Код:
no matching function for call to 'run(Test* const, void (Test::*)(QFutureInterface<void>&, int&), int&)'

Как мне все-таки вызвать функцию с параметром?


Название: Re: QtConcurrent для функции с параметрами и QFuture
Отправлено: AlekseyK от Май 22, 2015, 23:33
Такой же вопрос.


Название: Re: QtConcurrent для функции с параметрами и QFuture
Отправлено: hank от Июнь 01, 2015, 14:33
Чтобы забиндить функцию с параметрами, следует использовать boost::bind или std::bind.


Название: Re: QtConcurrent для функции с параметрами и QFuture
Отправлено: AlekseyK от Сентябрь 19, 2015, 00:21
Смотрите решение здесь: http://www.prog.org.ru/topic_23042_0.html