Используйте QThreadPool внутри рабочей задачи - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть 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));

    //...
}

Но я не уверен, что это правильный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...