gpt4 book ai didi

c++ - QThreadPool 用于同时运行大量计算

转载 作者:行者123 更新时间:2023-11-30 02:47:33 25 4
gpt4 key购买 nike

我目前正在使用 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 可能是个问题。如文档中所述,Queded 连接需要与线程一起使用。参见 QtConcurrent with QFuture 和 QFutureWatcher,这个类可能对你有帮助

关于c++ - QThreadPool 用于同时运行大量计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22686043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com