QT-QIODevice内存泄露解决

QIODevice在一个死循环(一般在子线程)内读写,会引发内存泄漏,如下代码

1
2
3
4
5
6
QIODevice ioDevice;
while (1) {
// 其他操作
ioDevice.write(buf); // 此处会引发内存泄露,虽然增长比较缓慢
QThread::msleep(10);
}

这个时候需要在循环中强制事件循环,即qApp->processEvents(),当然QEventLoop也可以,代码改为

1
2
3
4
5
6
QIODevice ioDevice;
while (1) {
ioDevice.write(QByteArray());
QThread::msleep(10);
qApp->processEvents(); // 强制事件循环
}

QSerialPort也会发生如上面这种情况发生内存泄漏,好像QT中基于QIODevice的类都是这样