爱学习丶 2023-09-25 16:32 采纳率: 42.9%
浏览 8
已结题

请问qt编写的程序造成未响应可以进行捕捉吗?

同样的程序在4台机上面运行,有1台每天会出现1-2次程序未响应。实在找不到问题。如果是硬件原因会引起程序未响应吗?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-25 20:03
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/351173
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:此应用程序无法启动,因为没有Qt平台插件可以初始化,重新安装应用程序可能会解决此问题
    • 您还可以看一下 梅会东老师的Qt高级系列之8:Qt多线程线程池数据同步机制及文件下载器项目实战课程中的 断点续传及配置文件的讲解小节, 巩固相关知识点
    • 除此之外, 这篇博客: 解决QT接受串口数据时数据更新不及时,串口数据太多导致程序界面崩溃,串口接收数据过快等问题中的 4) 运行错误,报错 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      上述解决完后,又发现一个新的问题,也不知道时软件的缘故还是程序不对,read和readAll函数一次能够接受的最大数据为32个字节。尝试使用64位编译器,在程序中再加一个读串口的程序都没有作用,加的第二次读串口的程序根本就没有进去。由于每次接受32个字节,每次都是循环到需要的报文处截止,这就导致有效的数据可能出现在第二次接受的数据中,但是由于不是报文头,程序给剔除掉了。导致每次输出的数据越来越少,到最后程序报错:
      在这里插入图片描述
      于是查阅可不可以读取串口的时候读取两次,结果又发现了一个很神奇的函数bytesAvailable(),通过这个函数,我们为您可以在缓存中的数据达到大于等于33字节的时候再进行读取操作,同时保留补充的字节的语句,终于大功告成了!代码如下:

         if(portAngle.bytesAvailable()>=33){  // 等数据达到要求再进行读取操作
              buffer.append(portAngle.read(33));
              while(!buffer.isEmpty() and !(buffer[0]==0x55 and buffer[1]==0x53)){// 对错误数据进行处理,直到满足要求
                  buffer.remove(0,1);
              }
              if (buffer!=""){
                  buffer.append(portAngle.read(11-buffer.size())); //补充数据,保证所需字段数据完整
                  ucRxBuffer = reinterpret_cast<unsigned char *>(buffer.data());
                  angleHandle(ucRxBuffer);
                  // 清空缓冲区
                  buffer.clear();
              }
          }
      

      后续遇到问题,在更新······


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月10日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?