我目前正在使用 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 时遇到了一些问题)。写入输出侦听器时会出现问题吗?