我目前正在使用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/

10-10 16:42