Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Создать несколько потоков в Qt

#cpp #qt


В Qt есть аналогичный способ создания нескольких потоков?

for (int i = 0; i < iThreadCount; ++i) {
    threads.push_back(boost::thread(func));
}

    


Ответы

Ответ 1



В Qt есть QThreadPool и QtConcurrent. Например QtConcurrent::map: struct Task { int i; } int foo(const Task& t) { return t.i * t.i; } QVector tasks; tasks << Task{2} << Task{4}; QFuture future = QtConcurrent::map(tasks, foo); future.waitForFinished(); Результаты выполнения foo() в future.results().

Ответ 2



1) Пул потоков: class Thread : public QRunnable{ void run(){ func(); } }; //... for (int i = 0; i < iThreadCount; ++i) { QThreadPool::globalInstance()->start(new Thread); } 2) QtConcurrent::run //вместо void тип возвращаемого значения func QVector > futures; for (int i = 0; i < iThreadCount; ++i) { futures.append(QtConcurrent::run(func)); }

Комментариев нет:

Отправить комментарий