У меня есть QThreadPool, который запускает некоторые задачи.Мне нужно также создавать новые задачи в других задачах.Для этого я думаю реализовать что-то вроде следующего:
class Task : public QRunnable
{
QThreadPool *pool;
public:
Task (QThreadPool *p) : pool(p){}
void run()
{
static std::atomic<int> counter = ATOMIC_FLAG_INIT;
qDebug() << QThread::currentThreadId();
int c;
if ((c = counter.load(std::memory_order_acquire)) < 10) {
pool->start(new Task(pool));
counter.store(c + 1, std::memory_order_release);
}
}
};
int main(int argc, char *argv[])
{
//...
QThreadPool threadPool;
threadPool.start(new Task(&threadPool));
//...
}
Но я не уверен, что это правильный подход.