2013-12-22 4 views
4

У меня есть класс, как этотQThread, добавляя функции к 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 здесь, я ве посмотрел на учебники все они предназначены только для классов не для функции?

ответ

4

Если вам необходимо запустить функцию в отдельном потоке, вы можете использовать QtConcurrent так:

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

Edit: Вы можете использовать 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. 
+0

спасибо, а также как функция (а) может подождать, пока все ступени не будут сделаны. –

+0

@BMacit, см. Мое редактирование выше. –

+0

спасибо @ user2014561 Я так много спрашиваю, но последний вопрос: если b возвращает значение, как мы можем его получить (например: int b()) –

Смежные вопросы