异步编程就是这么麻烦。qt modbus 或者 asio http 库都是帮你封装好了,才会显得好用。
麻烦是麻烦了点。但思路还是很清晰的,就是把一个协议封装成一个类,不断地尝试条件,条件满足调用处理器。
struct ParseSerial {
QByteArray buf;
void parse() {
while (true) {
if (buf.contains(tail_term_1)) {
handleNormalPacket(buf.mid(0, buf.indexOf(tail_term_1)));
buf.remove(0, buf.indexOf(tail_term_1));
} else if (buf.size() >= nextPacketSize) {
handlePacket(buf.left(nextPacketSize));
buf.remove(0, nextPacketsize);
} else break;
}
}
};
ready 后读取数据 buf.append(data),再调用 parse()
【 在 scanworld (臭蛋超人) 的大作中提到: 】
: 待读取内容是unsigned char 十六进制 一个完整数据大约30个字节
: 有头有尾 尾前边有一个校验字节
: 读的过程中发现ready情况下 readall不一定读多长 这种怎么处理好些
: ...................
--
FROM 112.47.122.*