Qthread,为qthread添加功能

时间:2013-12-22 14:29:27

标签: c++ multithreading qt qthread

我有一个类似的课程

class Class1 : public QObject
{
    Q_OBJECT
    void a();
    void b();
    ...........

void Class1:a()
{
    for(int i=0;i<10;i++)
        b();//I want here to make parallel 

           //and wait here all threads are done


}

我怎样才能在这里使用qhthread,我看过教程,他们都只是针对不是函数的类?

1 个答案:

答案 0 :(得分:4)

如果您需要在单独的线程上运行某个函数,可以像这样使用QtConcurrent

QtConcurrent::run(this, &Class1::b);

编辑:您可以使用QFutureSynchronizer等待所有线程,不要忘记使用QThreadPool::globalInstance()->setMaxThreadCount()分配所有线程。

编辑2:您可以使用synchronizer.futures()访问所有线程返回值。

示例:

QThreadPool::globalInstance()->setMaxThreadCount(10);
QFutureSynchronizer<int> synchronizer;
for(int i = 1; i <= 10; i++)
    synchronizer.addFuture(QtConcurrent::run(this, &Class1::b));
synchronizer.waitForFinished();
foreach(QFuture<int> thread, synchronizer.futures())
    qDebug() << thread.result(); //Get the return value of each thread.