QtConcurrent与成员函数和线程池

时间:2016-03-23 20:50:09

标签: c++ multithreading qt

我可以使用QtConcurrent :: run在单独的线程中运行成员函数。我使用以下代码:

QFuture<MyObject> future = QtConcurrent::run(this, &MyClass::doSomething, param1, param2);

现在我想使用自定义QThreadPool而不是全局QThreadPool,因为此任务的线程数应该是可配置的。根据文档,我尝试了以下代码,但遗憾的是它无法找到适合的重载。

QThreadPool pool;
QFuture<MyObject> future = QtConcurrent::run(&pool, this, &MyClass::doSomething, param1, param2);

支持吗?

2 个答案:

答案 0 :(得分:0)

AFAIK,QThreadPoolQtConcurrent不能混合在一起

如果您想使用QThreadPool,则需要定义QRunnable的实例,该实例可以在其MyClass::doSomething函数中调用您的函数run()。< / p>

/* code not tested */
class RunnableHelper: public QObject, public QRunnable
{
    Q_OBJECT

    /* param1, param2 storage */

public:
    explicit RunnableHelper(param1, param2);

    void run()
    {
        MyClass::doSomething(param1, param2);
    }
};

RunnableHelper* rh= new RunnableHelper(param1, param2);
QThreadPool::globalInstance()->start(rh);

答案 1 :(得分:0)

迟到聚会;还是..

有可能。我所做的是,

QThreadPool *pool;
pool = new QThreadPool() ;
.
.
QFuture<MyObject> future = QtConcurrent::run(pool, ...);