0
QThreadでスレッドポーリングを作成しようとしています。QThreadスレッドプール
class ThreadPool: public QObject
{
Q_OBJECT
public:
ThreadPool(int maxThreads);
void addTask(MyTask *task);
private:
int maxThreads;
QMutex mutex;
QVector<QPair<bool, QThread>> threads;
QThread *getFreeThread();
public slots:
void freeThread();
};
void ThreadPool::addTask(MyTask* task)
{
QThread *thread = getFreeThread();
task->moveToThread(thread);
connect(thread, SIGNAL(started()), task, SLOT(doWork()));
connect(task, SIGNAL(workFinished()), thread, SLOT(quit()));
connect(thread, SIGNAL(finished()), task, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), this, SLOT(freeThread()));
thread->start();
}
私はタスクを実行したいスレッドを制限して作成しています。 しかし、私は解放されたスレッドの番号を取得する方法を理解していません。 私はQThreadPoolとQtconcurrentについて知っていますが、私はそれを使いたくありません。 おそらく、それはQPairのベクトルの各スレッドでそれが無料であるかどうかに注目する価値があります。
完全には、QThreadPoolクラスがあります。 –