我写过这样的代码(这里简化)
Test::test()
{
timer = new QTimer(this);
timer -> setInterval(300);
timer -> setSingleShot(true);
connect(this->timer, SIGNAL(timeout()),this,SLOT(first_process()));
char first_request = 0x02;
serial -> write( &first_request);
timer -> start();
}
Test::first_process()
{
QByteArray data = serial->readAll();
//process data...
char second_request = 0x02;
serial->write( &second_request );
disconnect(this->timer, SIGNAL( timeout() ), this, SLOT( first_process() ));
connect( this->timer, SIGNAL( timeout() ), this, SLOT( second_process() ));
timer->start();
}
(串行当然是初始化,波特设置等等......)
所以一个,6个进程“排队”一次执行。但是我从响应中看到数据一次又一次地发送,即在第三个“进程”中,我在第四个另一半中重现了一半的第一个响应,其中一些其他数据在中间。
我无法看出错误发生在哪里 - 设备应该响应命令,数据应该读取到QByteArray
1)为什么数据即使没有被要求发送两次(或更多次)?这是某种缓冲问题吗?
2)是否有其他机制可以实现这种行为? (我已经尝试将readyRead()连接到读取功能,但问题是数据被撕成碎片,我一次想要所有的东西)