Спи внутри метода QTConcurrent run - PullRequest
0 голосов
/ 11 марта 2019

Я использую QtConcurrent::run для выполнения некоторых функций в фоновом режиме, а не для зависания потока GUI.В одной функции я читаю журналы из локальной базы данных SQlite и отправляю их на сервер через сокет TCP.

Теперь я хочу отложить выполнение после каждого журнала, чтобы сервер успел его сохранить (ответ TCP читается вдругая тема).Я застрял с Qt4.8 из-за ограничений реализации (многие встроенные устройства - нет возможности обновить QT на них), и я не могу использовать QThread::sleep(2), потому что он защищен в 4.8.Можно ли как-то приостановить выполнение потока внутри метода QtConcurrent::run или я должен изменить его структуру, чтобы реализовать собственный класс, наследующий QThread?

void MainWindow::ReportFinishedHUs(bool asyncWork)
{
if(asyncWork == false)
{
    QMutexLocker locker(&localDBmutex);
    QList<QSqlRecord> HUsToReport = localDB->getHUsForBook();
    qDebug() << "HUs to report" << HUsToReport.count();
    if(!HUsToReport.isEmpty())
    {
        Cls_log::WriteDebugLog("HUs to report: " + QString::number(HUsToReport.count()));
        foreach (QSqlRecord record, HUsToReport)
        {
            int _hu = record.indexOf("hu");
            int _logTime = record.indexOf("logTime");

            QString logTimeString = record.value(_logTime).toString();
            QString hu = record.value(_hu).toString();
            qDebug() << hu << logTimeString;

            // creating message here ...

            qDebug() << message;
            emit sig_SendTCPMessage(message);

            // this is where I need to wait for 2 seconds
            QThread::sleep(2);
        }
    }
}
else
{
    QtConcurrent::run(this, &MainWindow::ReportFinishedHUs, false);
}
}

РЕДАКТИРОВАТЬ:

Решено с помощью usleep(2000000), который я почему-то отбросил за то, что он зависит от платформы ... но, эй, половина моего приложения зависит от платформы, и я использую его только на встроенном устройстве с постоянной ОС.

Сохранение вопроса открытым, если кто-то может предложить большеРешение Elegand с использованием методов Qt.Мне нравится вдохновляться.

...