首页 > 其他分享 >QT中线程睡眠对数据IO的影响——串口bug记录

QT中线程睡眠对数据IO的影响——串口bug记录

时间:2023-05-09 22:44:55浏览次数:49  
标签:QT IO QTime 线程 延时 串口 data

  这两天用QT做一个上位机,涉及到有一个数据发送完后需要用到延时,我一开始使用了线程休眠的方式进行延时:

//发送读取指令
if (serialport->write(data) == -1) {
    qDebug() << "发送失败!";
}

QThread::msleep(1000);
  
serialport->clear();

  然后我发现data并没有被发送出去,随后排查发现在data数据进入串口发送缓冲区后,调用线程休眠,数据并没有及时发送,而是等待线程唤醒后再发送数据。然而我们唤醒线程后立即执行了clear(),这时休眠前的数据还没发出去就被清理掉了,导致数据丢失。

  正确的方式还是使用定时器,以下是我定义的一个定时器延时函数:

//延时函数
void MainWindow::sleep( int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
    QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

  

标签:QT,IO,QTime,线程,延时,串口,data
From: https://www.cnblogs.com/hw-blog/p/17386568.html

相关文章

  • Transformer 模型中的positional encoding(位置编码)计算理解(2)
            以下(以上)内容来自(参考):https://www.bilibili.com/video/BV1Di4y1c7Zm?p=2&vd_source=6292df769fba3b00eb2ff1859b99d79e  importnumpyasnpdefgetPositionEncoding(seq_len,dim,n=10000):##seq_len:序列长度##dim词向量的维......
  • AStyle - Clion中配置代码格式化工具
    安装(OSX平台)brewinstallastylebrewlistastyleCLion配置1、下载插件FileWatchers2、配置插件FileWatchers:按照图中一摸一样填写即可Name:用户自己取个名字Filetype:选C/C++Scope:选择OpenFilesProgram:找到目录并选择上面brewlistastyle的路径Argument(附:博主......
  • Visual Studio 2022 设置 IIS Express 运行在 32 位模式
    当:1、在VisualStudio2022中开发需要访问Access数据库的网站项目时,遇到错误:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。2、在VisualStudio2022中开发需要访问SQLite数据库的网站项目时,遇到错误:未能加载文件或程序集“System.Data.SQLite.DLL”或它的......
  • Personalized Top-N Sequential Recommendation via Convolutional Sequence Embeddin
    目录概符号说明Caser代码TangJ.andWangK.Personalizedtop-nsequentialrecommendationviaconvolutionalsequenceembedding.WSDM,2018.概序列推荐的经典之作,将卷积用在序列推荐之上.符号说明\(\mathcal{U}=\{u_1,u_2,\cdots,u_{|\mathcal{U}|}\}\),us......
  • KingbaseES数据库运维案例之---permission denied to create "sys_catalog.xxx"
    ​KingbaseES数据库运维案例之---permissiondeniedtocreate"sys_catalog.bdsj_bdgl_test"案例说明:在KingbaseES数据库kingbase.conf修改了search_path='"$user",sys_catalog'后,在数据库下执行创建对象操作,出现以下故障。适用版本:KingbaseESV8R6一、问题现象如下所示......
  • KingbaseES V8R6 等待事件之LWLock Buffer_IO
    等待事件含义当进程同时尝试访问相同页面时,等待其他进程完成其输入/输出(I/O)操作时,会发生LWLock:BufferIO等待事件。其目的是将同一页读取到共享缓冲区中。每个共享缓冲区都有一个与LWLock:BufferIO等待事件相关联的I/O锁,每次都必须在共享缓冲区外部检索页。此锁用于处理多个会......
  • 论文阅读笔记《Training Socially Engaging Robots Modeling Backchannel Behaviors w
    TrainingSociallyEngagingRobotsModelingBackchannelBehaviorswithBatchReinforcementLearning训练社交机器人:使用批量强化学习对反馈信号行为进行建模发表于TAC2022。HussainN,ErzinE,SezginTM,etal.TrainingSociallyEngagingRobots:ModelingBackc......
  • vue2+vant2+rem+axios+钉钉自动登录 h5模板
    下载代码请轻轻的点一下这里~Node版本要求VueCLI需要Node.js8.9或更高版本(推荐8.11.0+)。你可以使用nvm或nvm-windows在同一台电脑中管理多个Node版本。本示例Node.js14.17.0启动项目npminstallnpmrundev打包项目打测试包会带vconsole控制台对......
  • Qt XML读写之 QXmlStreamReader、QXmlStreamWriter
    OverviewQtXML将不再接收额外的功能。对于迭代地读取或编写XML文档(SAX),Qt建议使用QtCore的QXmlStreamReader和QXmlStreamWriter类。这些类既易于使用,又更符合XML标准。但是遗憾的是如果想修改更新XML文档,这个模块没有提供解决方案,还只能使用QDomDocument。QXmlStreamReader类......
  • CF1824B2 LuoTianyi and the Floating Islands (Hard Version) - 概率期望 - 树的重心
    题目链接:https://codeforces.com/contest/1824/problem/B2题解:考虑一棵\(n\)个点的树,假如已经选定了\(k\)个特殊点,如何判断某一个点是否为好点?显然将这个点提到根没有影响,那么好点的充要条件是对于所有子树的\(S_u\)值都\(\leqk/2\),这里\(S\)代表\(u\)子树中的特殊......