bran_lee:AutoControlPacket到底是什么时候创建的?是全局的还是局部的?信号传的是引用?传到另一个线程后AutoControlPacket会不会被析构?
(2016-12-07 11:51) 
AutoControlPacket是ControlThread的私有变量,槽函数是这样
void demo::semdControlPacket(Packet packet)
{
Packet resu = packet;
emit sendcontroloutput(resu);
}
导一下emit sendcontroloutput(resu)再把数据传到Qtcpthread线程;用于控制;
奇怪的是今天我把上面代码这步分删了
//发送自动控制命令包
if (!sendControlPacket.hexString.isEmpty())
{
Sendpacket.name = sendControlPacket.name;
Sendpacket.hexString = sendControlPacket.hexString;
clientConnection->write(Sendpacket.getByteArray());
clientConnection->waitForBytesWritten(10);
Sendpacket.clear();
sendControlPacket.clear();
}
在Qtcpthread中变成了这样:
//单包发送模式 Ui按钮控制命令
if (!sendLoopPacketPersistent.hexString.isEmpty())
{
Sendpacket.name = sendLoopPacketPersistent.name;
Sendpacket.hexString = sendLoopPacketPersistent.hexString;
clientConnection->write(Sendpacket.getByteArray());
clientConnection->waitForBytesWritten(10);
sendLoopPacketPersistent.clear();
Sendpacket.clear();
}
//continue;
//数据读取模式
QByteArray readdata;
readdata.clear();
readdata = clientConnection->readAll();
clientConnection->waitForReadyRead(10);
if (!readdata.isEmpty())
{
emit passdataout(readdata);
}
}
一次写入,一次读取;写入的时候把ControlThread传的数据append了一下,与其他数据一起发送,而不是开始那样在while里检测是否有数据,二次写入;
开始是过两分钟后程序自动断点崩溃,现在不知为什么却没发现断的情况。这种情况肯定是野指针的问题,可关键是不知道在哪,程序像一个定时炸弹;