現在、QThreadPool を使用して計算を実行していますが、すべてを QThreadPool に投入すると、実際にはうまく機能せず、クラッシュの問題が発生しているようです。したがって、私の考えは、一度に QThreadPool に渡すスレッドを少数にすることです。QThreadPool を使用して 1 台の 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 を使用するには問題がありました)。これは、出力リスナーに書き込むときに問題になりますか?