我可以使用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);
支持吗?
答案 0 :(得分:0)
AFAIK,QThreadPool
和QtConcurrent
不能混合在一起
如果您想使用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, ...);