QtSerialPort and memory usage
-
I am using a BAFO USB to serial converter
as seen here:
http://www.dx.com/p/bafo-usb-to-rs232-converter-5947#.VhTCIuyqpHwTrying to eliminate some unknown possible situations:
Assuming for a moment that there is a hardware bug with the
USB to serial converter hardware/driverThe same serial hardware is connected to the same converter and is read
with Terra Term (Version 4.76)It's memory usage (Private Working set) remains stable at 8,668K reading
the same data. I just wonder why it is showing stable memory usage.http://postimg.org/image/a2qb10ev1/
I wondered, how the other QtSerialExamples behaved;
Tried with the simple terminal example
D:\Qt\Qt5.5.0\5.5\Src\qtserialport\examples\serialport\terminal\release>Even terminal shows a memory usage increment, much like the code snippet
that's under scrutiny. I wonder, how Terra Term is able to cope with a
consistent memory usageUpdated the original code to print out the memory usage.
Updated code output screencap shows the usage memory
incrementing:
http://postimg.org/image/cfofnghnl/For sake of completeness, including the updated code in here
#include <windows.h>
#include "psapi.h"#include <QtSerialPort/QSerialPort>
#include <QCoreApplication>
#include <QDebug>
#include <QDateTime>int main(int argc, char *argv[])
{
PROCESS_MEMORY_COUNTERS_EX pmc;
QCoreApplication a(argc, argv);
QSerialPort port;
char dt;port.setPortName("COM13"); if (!port.open(QIODevice::ReadWrite)) { qDebug() << "Open" << port.portName() << "failed"; return -1; } qDebug() << port.portName() << "Open @" << QDateTime::currentMSecsSinceEpoch(); port.setBaudRate(QSerialPort::Baud9600); // Baud rate port.setDataBits(QSerialPort::Data8); // Data bits port.setParity(QSerialPort::NoParity); // Parity port.setStopBits(QSerialPort::OneStop); // Stop bits port.setFlowControl(QSerialPort::NoFlowControl);// Flow control port.setReadBufferSize(1); while (1) { if (port.waitForReadyRead(10)) { port.read(&dt, 1); GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc)); qDebug() << "Read @" << QTime::currentTime() << "Used:" << pmc.PrivateUsage; } } return a.exec();
}
-
Hmm if tera works with same usb serial then it cant be the driver.
Im also using serial over usb.Tried to run updated code. just to ebe sure.
get link error
undefined reference to `GetProcessMemoryInfo@12'What should i put in .pro to run ?
something with -lpsapi.
Mostly on linux so not sure with syntax -
Yes.
Sorry, missed the .pro file. inlined it
#-------------------------------------------------
Project created by QtCreator 2015-10-06T21:35:43
#-------------------------------------------------
win32:LIBS += -lpsapi
QT += core serialport
QT -= gui
TARGET = Serial
CONFIG += console
CONFIG -= app_bundleTEMPLATE = app
SOURCES += main.cpp
-
works.
Still stable.
Do you have input on the serial ?
I will connect something that sends data. just to check.
How do you make it open console also ?
Here its just a process.
Update:
ignore last question. just saw its QDebug
Also, with input , I do see mem raising.
Testing more -
ok,
slowly from 12k to 17k. over time when it has input.
Also the pmc changes.
So yes. I see the same.
Will leave it running for some time to check if it stops. -
Yes, I do have a microcontroller reading values and outputting to serial port
continuously.Actually, the application I created is a console application. The info is output
with QDebug additionally.Nevertheless, you can choose to output with console without QDebug too.
CONFIG += console
in the .pro file
Create a output stream in the actual code
QTextStream out(stdout);
and output whatever required
out << "Something" << endl;
-
Can you please test same with the virtual com0com: http://sourceforge.net/projects/com0com/
A signed driver for x64: https://code.google.com/p/powersdr-iq/downloads/detail?name=setup_com0com_W7_x64_signed.exe&can=2&q= -
How should I configure com0com ?
Just create a pair with the "use port class" and "eneble buffer overrun" (via setupg.exe ui)
just as a virtual port or as a loop ?
as a two virtual ports. . e.g. COM1 as receiver for qserialport and COM2 as sender for other software (e.g. I have used Termite app to send).
UPD:
Yes, I too can reproduce this memory leak..
-
Probably it is a bug of QWinOverlappedIoNotifier : https://bugreports.qt.io/browse/QTBUG-48653
Let's wait for more info about..