我目前正在使用QThreadPool来运行一些计算,但是我发现是否将所有内容都扔到QThreadPool中,它实际上表现不佳,似乎导致了崩溃的问题。所以我的想法是一次只有几个线程传递到QThreadPool中。我想知道是否有人可以共享有关如何使用QThreadPool在一台PC上处理数千个计算的代码或示例。我写了一些东西,但是现在我觉得这引起了一些崩溃的问题(A类是从QRunnable继承的):
for(int i=0;i<1000;i++)
{
Class* A = new Class();
A->doSomeSetting(i);
A->setAutoDelete(true);
connect(A,SIGNAL(OutputProvider(int))
,this,SLOT(OutputListener(int)),Qt::DirectConnection);
QThreadPool::globalInstance()->start(A);
m_thread_count++;
if(m_thread_count >0 && m_thread_count %m_maxThreadInPool == 0)
{
QThreadPool::globalInstance()->waitForDone();
}
}
QThreadPool::globalInstance()->waitForDone();
和初始化的设置:
m_maxThreadInPool = 4;
QThreadPool::globalInstance()->setMaxThreadCount(4);
m_thread_count = 0;
std::vector<int> output;
输出监听器:
void OutputListener(int output)
{
output.push_back(output);
}
这是正确的做法还是有更好的办法?
另外,设置最大线程数时,可以输入的最大数量是可以拥有的内核数量吗?
我也在使用Qt::DirectConnection(使用QueueConnection对于我来说有些问题)。写入输出监听器时会出现问题吗?
最佳答案
Qt::DirectConnection可能是一个问题。如文档中所述,队列需要与线程一起使用。请参阅QtConcurrent和QFuture和QFutureWatcher,此类可能对您有所帮助
关于c++ - QThreadPool用于同时运行大量计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22686043/