Qt串口通信 waitForReadyRead函数与waitForBytesWritten函数导致的内存增长问题记录
https://blog.csdn.net/yzt629/article/details/105777550
这段时间做项目需要有一个进行快速采集信息的设备,但是在单独测试的过程中发现程序的内存占用会一直增长,也就是所谓的内存泄露问题。这个问题困扰了我们几个星期,我尝试了通过事件循环重写waitfor系列函数来解决这个问题,但是由于线程包含问题导致了新的问题。。。今天在Qt的官方论坛上搜索时发现15年就有人发现了这个问题,然后上传了bug库并得到了解决,所以特此记录。
串口的读取或者写入(高频率),会导致运行exe的内存占用不断提升,在一定时间后内存泄露到一定程度会导致软件崩溃。
while (1)
{
if (port.waitForReadyRead(10))
{
port->readAll();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
内存泄露问题将迎刃而解,就像下面这样:
while (1)
{
if (port.waitForReadyRead(10))
{
qApp->processEvents();
port->readAll();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
后记:真的是一个很简单的问题,但是之前一直没有考虑这么多,真的是很惭愧,毕竟自己以后用Qt的机会将会越来越少,现在居然还碰到这么简单的问题拖了这么久才解决,真的是非常愧疚。不仅是自己能力上的愧疚,还有就是对于解决方案搜素的愧疚,一个15年就在论坛上讨论并提出bug后解决的问题,居然困扰了自己这么久,很是惭愧。
此bug讨论网址:https://forum.qt.io/topic/59472/qtserialport-and-memory-usage
此bug解决方案:https://bugreports.qt.io/browse/QTBUG-48653
while (1)
{
if (port.waitForReadyRead(10))
{
port->readAll();
}
}
while (1)
{
if (port.waitForReadyRead(10))
{
qApp->processEvents();
port->readAll();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
后记:真的是一个很简单的问题,但是之前一直没有考虑这么多,真的是很惭愧,毕竟自己以后用Qt的机会将会越来越少,现在居然还碰到这么简单的问题拖了这么久才解决,真的是非常愧疚。不仅是自己能力上的愧疚,还有就是对于解决方案搜素的愧疚,一个15年就在论坛上讨论并提出bug后解决的问题,居然困扰了自己这么久,很是惭愧。
此bug讨论网址:https://forum.qt.io/topic/59472/qtserialport-and-memory-usage
此bug解决方案:https://bugreports.qt.io/browse/QTBUG-48653