Qt, потоки и объекты. Как правильно?

264
05 мая 2022, 19:40

Я много читал о том, как работать с потоками в Qt. Кто-то наследуется от QThread и переопределяет void run();, кто-то наследует класс worker от QObject, связывает через сигнал-слоты с объектом QThread и перемещает его туда. Но насколько правильно делать вот так:

Конструктор:

DatabaseAccessor::DatabaseAccessor()
{
    dbThread = new QThread();   //создаем новый поток
    this->moveToThread(dbThread);       // перемещаем себя в новый поток
    dbThread->start();      // запускаем поток
    tmr = new QTimer();     //создаем таймер
    tmr->moveToThread(dbThread);

    connect(dbThread,dbThread->finished, [](){   //проверяем, что поток завершился
       qDebug() << "dbThread finished";
    });
    connect(dbThread,dbThread->destroyed, [](){     //проверяем, что объект потока уничтожен
       qDebug() << "dbThread destroyed";
    });
    connect(tmr,tmr->destroyed, [](){       //проверяем, что объект таймера уничтожен
       qDebug() << "timer destroyed";
    });
    connect(tmr, tmr->timeout, this, this->checkDbCon);     //подключаем таймер к слоту
    
    qDebug() << "поток объекта" << this->thread() 
             <<  " dbThread " << dbThread 
             << " timerThread" << tmr->thread(); // проверяем, что все живут в одном потоке
}

Деструктор:

DatabaseAccessor::~DatabaseAccessor()
{
    tmr->deleteLater();
    dbThread->quit();   //завершаем поток
    dbThread->deleteLater();
}

Вывод в консоль:

поток объекта QThread(0x182d34d0)  dbThread  QThread(0x182d34d0)  timerThread QThread(0x182d34d0)
con res = true
таймер сработал
таймер сработал
can change db
con res = true
таймер сработал
//тут я убиваю объект
dbThread finished
timer destroyed
dbThread destroyed

Какие подводные камни есть у такого варианта?

READ ALSO
проблема в подсчёте слов

проблема в подсчёте слов

Есть код который подсчитывает кол-во символов и слов в переменной $textС подсчётом символов всё хорошо , но с подсчётом слов есть один баг(фича)

146
Как реализовать подсчёт количества символов текстового файла?

Как реализовать подсчёт количества символов текстового файла?

Необходимо сделать подсчёт количества символов в текстовом файле, а затем рассчитать примерное количество времени для прочтения текстаВсё...

304