c++ - 在 QTCConcurrent 运行方法中休眠
问题描述
我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 方法提出更多优雅的解决方案,请保持问题开放。我喜欢受到启发。
解决方案
推荐阅读
- ckeditor5 - ckeditor5 创建具有属性的元素“图像”
- google-chrome - 如何在 Chrome 开发工具上显示 iPhone 的状态栏
- python - 使用深色主题引导 css 样式破折号组件
- javascript - 我是在生产构建期间还是在准备生产时删除 webpack-dev-server 和 hot-module 中间件代码?
- modelica - 如何在 Dymola 2019 FD01 中为 Visual Studio 编译器使用编译器标志
- r - 如何使用 dplyr 在数据框中交换 TRUE 和 FALSE
- inno-setup - 安装 Inno Setup 和 AVG 并弹出错误
- flutter - Dart Firestore 添加到数组
- python - 我想运行一个通过python中的数据框创建图像的函数
- verilog - ModelSim 仿真结果与我的多路复用器代码的逻辑不匹配