diff --git a/app/br/br.cpp b/app/br/br.cpp index efd0483..8b6eee6 100644 --- a/app/br/br.cpp +++ b/app/br/br.cpp @@ -235,8 +235,10 @@ int main(int argc, char *argv[]) { br_initialize(argc, argv); + QThreadPool separate; + separate.setMaxThreadCount(1); FakeMain *fakeMain = new FakeMain(argc, argv); - QThreadPool::globalInstance()->start(fakeMain); + separate.start(fakeMain); QCoreApplication::exec(); br_finalize(); diff --git a/openbr/plugins/meta.cpp b/openbr/plugins/meta.cpp index f00676c..a77d315 100644 --- a/openbr/plugins/meta.cpp +++ b/openbr/plugins/meta.cpp @@ -597,6 +597,26 @@ static void _projectList(const Transform *transform, const TemplateList *src, Te transform->project(*src, *dst); } +class ProjectListJob : public QRunnable +{ +public: + ProjectListJob(Transform * _transform, const TemplateList * _src, TemplateList * _dst) + { + transform = _transform; + src = _src; + dst = _dst; + this->setAutoDelete(true); + } + + Transform * transform; + const TemplateList * src; + TemplateList * dst; + void run() + { + _projectList(transform, src, dst); + } +}; + class DistributeTemplateTransform : public MetaTransform { Q_OBJECT @@ -650,13 +670,17 @@ public: output_buffer.append(TemplateList()); } - QFutureSynchronizer futures; for (int i=0; iparallelism) futures.addFuture(QtConcurrent::run(_projectList, transform, &input_buffer[i], &output_buffer[i])); - else _projectList( transform, &input_buffer[i], &output_buffer[i]); + + if (Globals->parallelism) + QThreadPool::globalInstance()->start(new ProjectListJob(transform, &input_buffer[i], &output_buffer[i]), 0); + else _projectList(transform, &input_buffer[i], &output_buffer[i]); } - futures.waitForFinished(); + + bool wait_res = QThreadPool::globalInstance()->waitForDone(); + if (!wait_res) + qDebug("global thread pool wait failed!"); for (int i=0; i