我正在使用QtConcurrent::run
在后台执行某些功能,而没有挂起GUI线程。在一项功能中,我从本地SQlite数据库读取日志,然后通过TCP套接字将其发送到服务器。
现在,我想在每个日志之后延迟执行,以便服务器有时间保存它(在不同线程中读取TCP响应)。由于实施限制(很多嵌入式设备-没有机会在其上升级QT),我坚持使用Qt4.8,并且我无法使用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)
解决,但我因某种原因而放弃了它,因为它是特定于平台的……但是,我的一半应用是特定于平台的,我只在具有恒定操作系统的嵌入式设备中使用它。
如果有人可以使用Qt方法提出更多的建议解决方案,请不要提出任何疑问。我喜欢受到启发。