• 725阅读
  • 3回复

[提问]使用多线程读写单片机信息,一段时间后线程卡死 [复制链接]

上一主题 下一主题
离线bigcatt
 

只看楼主 倒序阅读 楼主  发表于: 2023-03-02
源代码:

void HardWareThread::ReadCom()
{
    Output_timer->stop();
    if (!Buffer.isEmpty())
    {
        Buffer = Buffer.toHex();
        if (Buffer.size() == 22)
        {
            Input_timer->stop();
            LaserRangingArray = Buffer;
            Buffer.clear();
            qDebug() << LaserRangingArray;
            HardWareSerialPort->write("$ANGLE#6804000408");
        }
        if (Buffer.size() == 28)
        {
            Input_timer->start();
            AgleArray = Buffer;
            Buffer.clear();
            qDebug() << AgleArray;
        }
        //qDebug() << QThread::currentThreadId();
    }
}

void HardWareThread::onTimeout()
{
    HardWareSerialPort->write("$LASER#80060278");
}
通过定时器和延时接受交叉发送指令读取单片机的两种数据,但是会在一会儿后线程卡死。
离线fsu0413

只看该作者 1楼 发表于: 2023-03-02
Buffer.size()
不是22又不是28不就卡死了吗,这个时候又不clear,又一直不为空,size又不对,又没处理
1条评分金钱+1
wwwfffhhh 金钱 +1 - 2023-03-14
离线fsu0413

只看该作者 2楼 发表于: 2023-03-02
而且你这是多线程,肯定会又不止一个线程往buffer里写数据
离线bigcatt

只看该作者 3楼 发表于: 2023-03-05
最后的原因是上机位指令发送过快,后续没收到回复了,不过你说的也对,谢谢。
快速回复
限100 字节
 
上一个 下一个