Это хорошая идея, чтобы выйти из QThread, когда у него нет QObject? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть класс Worker, который немедленно перемещается в конструктор в QThread. Затем я распределяю входящий QTcpSocket среди этих работников. Поэтому, когда Worker не имеет QTcpSocket, будет ли хорошей идеей выйти из QThread и затем перезапустить его, когда появится новый Socket?

В настоящее время мой код выглядит так: -

void Qerver::incomingConnection(qintptr handle)
{
    RouterWorker* lessWoker = routeWorkers[0];

    for (const auto& i : routeWorkers) {
        if (i->getSockets() < lessWoker->getSockets()) {
            lessWoker = i;
        }
    }

    if( !lessWoker->getItsThread().isRunning() && !isSingleThreaded)
        lessWoker->getItsThread().start();

    QMetaObject::invokeMethod(lessWoker, [lessWoker, handle]() {
        lessWoker->addSocket(handle);
    });
}

RouterWorker::RouterWorker(QObject* parent)
    : QObject(nullptr)
    , itsThread(parent)
{
    if (QThread::idealThreadCount() > 2) {
        moveToThread(&itsThread);
        //        itsThread.start();
    }
}
...