【发布时间】:2017-03-31 23:20:47
【问题描述】:
我正在尝试使用 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 类。
标签: c++ qt threadpool