gpt4 book ai didi

c++ - Qt多线程: How to append few QRunnable tasks to QThreadPool

转载 作者:太空狗 更新时间:2023-10-29 20:41:51 28 4
gpt4 key购买 nike

我对 QThreadPool 的工作原理感到困惑,并且找不到答案。我想要这样的东西:

class Task : public QRunnable { solve problem #nb }

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

QThreadPool pool;
pool.addTask(task1);
pool.addTask(task2);
pool.addTask(taskN);
pool.start();

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

谢谢。

最佳答案

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

pool = new QThreadPool(this);
pool->setMaxThreadCount (1);
pool->start(myQRunnablePtr1);
pool->start(myQRunnablePtr2);
pool->start(myQRunnablePtr3);
// ...
pool->start(myQRunnablePtrN);

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

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

该类还有其他一些用例(如 tryStart),但对于大多数情况而言,这可能已经足够了。

关于c++ - Qt多线程: How to append few QRunnable tasks to QThreadPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180434/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com