關於Qt5 QSerialPort使用記憶體洩漏問題

2021-08-08 02:30:48 字數 2609 閱讀 1861

最近做乙個專案需要用到串列埠實時傳送與接收,串列埠通訊採用同步的方式。

在開發本機上測試沒有任何問題後,放到測試機上執行,發現記憶體以 4 kb / s 的速度增長,再次將測試機上程式拷貝到開發機器上發現無記憶體增長。。

於是開始查詢原因,發現測試機上使用的是電腦原生的串列埠,開發機上使用的是usb轉串列埠,於是在開發機上用原生串列埠與usb轉串列埠分別測試。 

結果發現 ,原生串列埠記憶體增長,usb轉串列埠沒有任何問題。

於是拿了三種不同機器測試,發現結果一樣(其中有一台機器的usb轉串列埠晶元不一樣也會記憶體增長)。正常的usb轉串列埠晶元為(pl2301和ftdi232),異常的為原生串列埠與ch340g。

於是抱著試一試的態度用qt第三方的串列埠類測試一下,鏈結為

測試**分別如下

class

qoriginserialport

:public

qthread

~qoriginserialport

()

protected

:

void

run()

serial

.setbaudrate

(qserialport

::baud115200

);

serial

.setdatabits

(qserialport

::data8

);

serial

.setparity

(qserialport

::evenparity

);

serial

.setflowcontrol

(qserialport

::noflowcontrol

);

serial

.setstopbits

(qserialport

::onestop

);

qbytearray

data

;

establishprotocol(1

,data

);

forever

if(

isinterruptionrequested

())

break

;

msleep(1

);

}

serial

.clear

();

serial

.close

();

}

};

class

_3rpartyserialport

:public

qthread

~_3rpartyserialport

()

protected

:

void

run()

serial

.setbaudrate(baud115200);

serial

.setdatabits(data_8);

serial

.setparity(par_even);

serial

.setflowcontrol(flow_off);

serial

.setstopbits(stop_1);

qbytearray

data

;

establishprotocol(1

,data

);

forever

;

serial

.readline(

data1,6

);

msleep(1

);

if(

isinterruptionrequested

())

break

;

}

serial

.close();

}

};

發現第乙個記憶體會漲,第二個記憶體不會漲,於是懷疑是不是qt串列埠類有一些不知道的問題存在,知道原因或者碰到此類問題的朋友可以交流。

QT實現串列埠除錯功能 QSerialPort類

1 簡介 本博文主要是介紹如何使用qt的串列埠類 qserialport 來實現串列埠的開發,使用這個類來實現串列埠的基本功能,比如如何查詢本機可用串列埠 com 開啟串列埠 設定串列埠波特率 設定資料位 設定校驗位 停止位等視窗屬性。還實現了十六進製制收發顯示資料,經過測試,本工程 可以在win7...

關於qt5 arm移植心得

首先是關於qt5編譯前的配置問題。對於配置,可以根據配置的help進行設定,其中有乙個比較重要的配置就是sysroot,sysroot就是本次編譯所要應用到的檔案系統上,這裡邊包括大量的動態庫,如果配置不正確,很可能在實際執行過程中缺少一定的庫,導致qt應用無法正常執行,所以sysroot是非常重要...

Qt5 中關於訊號槽的改動

qt5發布對訊號 槽的新方法。保證了在編譯階段即可對訊號槽使用進行檢查,避免了到執行階段才發現問題的尷尬。現將舊 新的訊號槽用法進行回顧總結。qt4中最常用的訊號槽寫法 connect obj1,signal fun1 param1,param2,obj2,slot fun2 param1,編譯後 ...