Qt 多线程:如何将几个 QRunnable 任务附加到 QThreadPool

cha*_*hao 3 c++ qt multithreading threadpool

我对如何QThreadPool工作感到困惑,无法找到答案。我想要这样的东西:

class Task : public QRunnable { solve problem #nb }
Run Code Online (Sandbox Code Playgroud)

现在,例如,我需要执行 10 个不相关且不共享某些值的任务。我希望我可以做这样的事情:

QThreadPool pool;
pool.addTask(task1);
pool.addTask(task2);
pool.addTask(taskN);
pool.start();
Run Code Online (Sandbox Code Playgroud)

对我来说,上面的例子是一个游泳池。我的任务很少,我添加到池中,最后在每个线程中全部执行,但这不是如何QThreadPools工作的。那么,我可以使用 来解决我的问题QThreadPool,还是应该使用其他东西?

谢谢你。

Mar*_*nck 5

基本上它适用于您的示例(注意:我在堆上创建池本身,否则它将在函数范围的末尾被删除)

pool = new QThreadPool(this);
pool->setMaxThreadCount (1);
pool->start(myQRunnablePtr1); 
pool->start(myQRunnablePtr2);
pool->start(myQRunnablePtr3);
// ...
pool->start(myQRunnablePtrN);
Run Code Online (Sandbox Code Playgroud)

如果允许线程同时运行,您可以将 maxThreadCount 设置得更高。在这个例子中,它们将按照开始/排队的顺序执行,第一个必须在第二个运行之前结束。

另外,您可以为启动功能添加优先级,以便稍后更改排队。假设您有一项必须立即开始的任务。

Class 也有一些其他用例(如 tryStart),但这对于大多数情况来说可能已经足够了。