#include #include #include "views/MyWindow.h" #include #include "database/database_manager.h" #include "database/dao/common_data_dao.h" #include "services/device_screener.h" void setupWorkerAndThread(QCoreApplication& app) { auto* thread = new QThread; auto* deviceScreenerWorker = new DeviceScreener; // Перемещаем worker в новый поток thread. // Это значит, что все слоты worker, вызываемые через connect(), теперь будут исполняться в этом фоне-потоке. deviceScreenerWorker->moveToThread(thread); // Когда поток запустится, автоматически вызовется worker->start() внутри фонового потока. QObject::connect(thread, &QThread::started, deviceScreenerWorker, &DeviceScreener::start); // 🔁 Эти 3 строки делают автоматическую зачистку: // Когда worker закончит работу (emit finished()), мы: // - останавливаем поток (thread->quit()) // - удаляем worker (deleteLater) // - удаляем thread (deleteLater) // Это защищает от утечек памяти и оставшихся потоков после завершения. QObject::connect(deviceScreenerWorker, &DeviceScreener::finished, thread, &QThread::quit); QObject::connect(deviceScreenerWorker, &DeviceScreener::finished, deviceScreenerWorker, &QObject::deleteLater); QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater); // Когда пользователь закрывает приложение (Ctrl+C, exit() и т.п.), мы вызываем worker->stop() — ты сам пишешь, что в этом методе. //Обычно он просто ставит флаг m_running = false, чтобы остановить бесконечный цикл в start() QObject::connect(&app, &QCoreApplication::aboutToQuit, [=]() { deviceScreenerWorker->stop(); }); thread->start(); } int main(int argc, char *argv[]) { QApplication app(argc, argv); // Setup worker and thread setupWorkerAndThread(app); const QDateTime current = QDateTime::currentDateTimeUtc(); qDebug() << "Обновление lastScan:" << CommonDataDAO::updateLastScan(current); const QDateTime savedTime = CommonDataDAO::getLastScan(); qDebug() << "Сохранившееся время:" << savedTime.toString(); // // // tesseract, tesseract-lang // QImage image("./images/img.png"); // if (image.isNull()) { // qDebug() << "Cant load the image"; // return -1; // } // // image = image.convertToFormat(QImage::Format_Grayscale8); // // tesseract::TessBaseAPI tess; // if (tess.Init(nullptr, "rus")) { // qDebug() << "Ошибка инициализации Tesseract с русским языком...."; // return -1; // } // // tess.SetImage(image.bits(), image.width(), image.height(), 1, image.bytesPerLine()); // // QString result = QString::fromUtf8(tess.GetUTF8Text()); // qDebug() << "Распознанный текст:" << result; MyWindow window; window.show(); return app.exec(); }