1. 程式人生 > >Qt串列埠通訊第三方類flush函式不能清空串列埠解決辦法

Qt串列埠通訊第三方類flush函式不能清空串列埠解決辦法

       有網友也提到qt第三方類的flush函式不好用的觀點,我最近正好在做一個程式,自己起一個讀執行緒一個寫執行緒,通過切換變數控制讀寫,就像單刀雙置開關一樣。沒辦法,對方的通訊協議定的這樣,不過這種辦法雖隨不是非同步通訊,但保障了安全,兩個執行緒絕對不會串在一起,然後通過回傳機制檢驗資料正確性。我就發現一點奇怪之處,當我每次點發送之前,我用了flush函式清空串列埠,但還是能讀到資料(對方並未傳送),可能是上次通訊異常中斷的殘留資料,這就把我給急壞了。。

網友用改flush函式的方法來解決,傳說能解決,但我沒實驗過,我用了一招最簡單的方法

readall()

要清空串列埠時把所有資料都讀進來,然後拋棄不管,呵呵,雖然方法有點蠢,但很實用。吐舌頭

還有多執行緒,我給點建議,直接用while寫在run()函式中,用一個跳出變數控制跳出迴圈,自動走出run函式,實際上執行緒run函式結束後他什麼也不會做,所以放心,不用quit,也不用teminate,很安全!!

相關推薦

Qt串列通訊第三方flush函式不能空串解決辦法

       有網友也提到qt第三方類的flush函式不好用的觀點,我最近正好在做一個程式,自己起一個讀執行緒一個寫執行緒,通過切換變數控制讀寫,就像單刀雙置開關一樣。沒辦法,對方的通訊協議定的這樣,不過這種辦法雖隨不是非同步通訊,但保障了安全,兩個執行緒絕對不會串在一起,

MFC空串緩衝區

Win32通訊API除了提供SetupComm()函式實現初始化的緩衝區控制外,還提供了PurgeComm()函式和FlushFileBuffers()函式來進行緩衝區操作。 PurgeComm()函式的宣告如下: BOOL PurgeComm( HANDLE hFile,  // 返回的控制代碼 DWOR

Qt編譯目錄下exe文件執行報錯問題的解決辦法

出現 window 編輯 狀態 發現 目錄 inf 編譯器 項目 使用Qt5.9.3+vs2017環境,編譯項目生成Debug目錄,運行其中的exe文件,出現以下錯誤(qt creator調試狀態下或出安裝包後是可以運行的): 經過查閱資料,發現是我重新配置Qt開發環境後

使用MySQL外掛的QT專案在通過windeployqt工具部署後無法訪問資料庫的解決辦法

一個專案,使用了QT自帶的qsqlmysql.dll(qsqlmysqld.dll)作為連線MySQL資料庫的介面,在QTCreator環境下可以自動載入libmysql.dll,可以順利訪問資料庫,但是通過windeployqt工具部署後,無法訪問資料庫。   推測是因為QT的w

Date獲取日期的方法失效的解決辦法

Java 學習了一段時間後,就習慣了在例項化一個類後,喜歡呼叫該物件的get或者set方法.      在一次學習中接觸了Date類,這時發現 get和set方法有時不是那麼好用的. 下面重演我學習過程中出現的錯誤,及解決的辦法: 在學習Date類時,習慣性的用get方法呼

QSqlTableModel呼叫rowCount函式返回值為0 解決辦法

先貼程式碼: //公告模組 void SysKaoqi::showElse() {msgText->show();model->setTable("message");QModelIndex index;int numRows = model->rowCo

GetTickCount函式計時置0的解決辦法

    使用API函式GetTickCount來計時非常方便,可惜它有一個致命的缺點,就是在計算機執行49.71天后,會自動置0,從而導致計時錯誤,因某些伺服器應用程式需要長時間不開機執行,GetTickCount函式顯然滿足不了要求。為此,我使用GetSystemTime

新建工程,載入別的時出現未加“****.h”檔案解決辦法

fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "dxstdafx.h"' to your sou

BAPI_ACC_MANUAL_ALLOC_POST 費用分配函式的小bug及解決辦法

function bapi_acc_manual_alloc_post. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle:

在VS2017環境下Qt讀寫Excel遇到"無法開啟 源 檔案 'QAxObject'"的錯誤解決辦法

問題: 無法開啟 源 檔案 "QAxObject" 解決辦法: 1、右擊工程 -> 點選 "Create Basic .pro File" 生成一個 .pro 檔案 2、在Resources資料夾裡面找到生成的 .pro 檔案,編輯生成的 .pro 檔案內容,在其

小程序使用npm模塊(引入第三方UI),報錯的多種解決辦法

改名 原因 微信 描述 工具 解決 原創 成了 npm安裝 前言引入第三方模塊時,我遇到了很多坑。 首先是微信、第三方模塊的文檔描述不清楚。其次。搜索到的博客,大部分是抄的文檔 / 相互轉載抄襲。作用有限。 於是,我自己做了各種條件下的測試。解決各種情況的引入Npm模塊的報

Win10 遠端桌面連接出現“要求的函式不受支援”的解決辦法之修改登錄檔

問題起因 筆者自己在阿里雲上搞伺服器,有一臺 Windows Server 必須通過遠端桌面連線來管理,由於沒能完全關掉 Win10 自帶的煩人的系統更新,導致昨天安裝完更新後出現了連線遠端桌面時“要求的函式不受支援”的問題。 問題描述 使用遠端桌面連線工

nginx反向代理tomcat,由於客戶端輸入的不一致造成網頁basehref錯誤的問題及解決辦法

由於埠限制的原因,外網開放的埠是8080,而nginx監聽的埠是80,通過埠對映,是外網8080對映至nginx所在主機的80埠上(假設nginx所在主機的ip是192.168.0.1,外網域名是domain.com)。這就導致通過外網訪問,瀏覽器輸入的地址是domain.c

抽象泛型中,json轉換型別丟失解決辦法

在 抽象泛型類中,一般會自動將資料轉換操作實現,使用者就不用關心資料轉換過程,專注業務處理就行了 重新實現TypeRe

CnComm多執行緒串列通訊的封裝實現v0.02

 在CnComm多執行緒串列埠通訊類的封裝實現一文中實現了對於cncomm多執行緒串列埠類的簡單封裝,新版本將串列埠管理類改成了工廠類和單例類,實現了對於動態擴充套件新的串列埠,新的版本符合開閉原則。 1.串列埠管理類 #ifndef _COMM_MANAGE_H_ #def

QT下的串列通訊例項(原始碼可下載QT5下測試通過)

在不瞭解QT下的串列埠如何呼叫的時候,我們可以首先到QT的官網上尋找答案,首先,我們可以訪問:以下網址,搜尋serial port qt,可以得到很多相關的線索 http://doc.qt.io/ 這個QSerialport類十分豐富,比VC中的使用起來更方便,如下網址,我們可以檢視它的所

Qt中Qchart外掛實現PMW3901迷你光流模組上位機(串列通訊

文章目錄 Qt中Qchart外掛實現PMW3901迷你光流模組上位機 光流計介紹 上位機 完整工程[猛戳這兒](https://github.com/LiangtaoZhong/PMW3901-monitor)。

C#呼叫C++函式來與串列通訊

前些日子幫朋友寫個小軟體,要求用C#來實現主程式,主要的功能是與一些通訊裝置打交道,當然就是通過串列埠了,以十進位制傳送和讀取串列埠 的資料,考慮到C#呼叫API並沒有C++來得方便,因此,我用C++封裝了一個讀寫串列埠的DLL,只提供一個函式供外部呼叫,這樣的好處在於,C# 只要呼叫這個函式傳

QT串列通訊(1)

       最近幫老師做的專案中使用到了QT串列埠,然後首先百度了一下,發現網上的QT串列埠程式碼都是同一個版本。而且沒有公開原始碼,遂自己寫了個簡單的串列埠通訊程式碼,並將它公佈出來,一方面供有需要的人蔘考,另一方面記錄下來,也可以防止自己忘記

QT學習筆記——串列通訊

寫一個最簡單的串列埠助手。 QT5以後,編寫串列埠不需要藉助第三方庫了,可以說方便了不少。 先建立QT專案,在.pro檔案里加入下面這行程式碼,不然會沒有串列埠庫額昂你使用的 QT += serialport 然後在標頭檔案mainwindows.h中加入標頭檔案 #inc