串列埠通訊丟失資料結局方案 C

2021-06-28 02:06:22 字數 687 閱讀 7330

串列埠通訊的一般思路是:先接收資料,然後處理資料,並在資料處理之後再次等待接收新的資料。但這種方法的缺點是,在串列埠高速率大資訊量通訊時,會出現丟失資料的情況。

丟失資料的原因是資料接收和資料處理再同乙個執行緒中,如果資料處理的時間太長,則來不及接收的資料只能暫存在快取中。因此,一旦快取滿了,新到的資料就會沖刷掉未來得及接收的資料,從而造成資料的丟失。因此,只是增加快取的容量不能解決資料丟失的根本問題。

解決思路:

資料接收與資料處理分別放在兩個執行緒中進行;

資料接收執行緒:接收資料並將接收到的資料存入資料池中;

資料處理執行緒:從資料池中讀取資料和處理資料;

注意:

由於兩個執行緒可能會同時訪問資料池,因此為了使資料接收得到最快的響應,最好不選用陣列結構,而是選用佇列queue作為資料池的資料結構。

佇列在順序儲存方面非常有用。資料物件在佇列的一段插入,另一端移除。當兩個執行緒同時訪問佇列時,乙個執行緒負責資料存入,另乙個執行緒只負責運算元讀取,就會提高程式的執行效率。

**:

資料接收執行緒:

receivethread()

資料處理執行緒:

dealdatathread()

}

C 串列埠通訊資料丟失解決方案

串列埠通訊的一般思路是 先接收資料,然後處理資料,並在資料處理之後再次等待接收新的資料。但這種方法的缺點是,在串列埠高速率大資訊量通訊時,會出現丟失資料的情況。丟失資料的原因是資料接收和資料處理再同乙個執行緒中,如果資料處理的時間太長,則來不及接收的資料只能暫存在快取中。因此,一旦快取滿了,新到的資...

C 串列埠通訊 解析串列埠發來資料

首先我們得先知道串列埠發來的資料是什麼樣子的 例如 55 aa 02 04 01 02 03 04 05 0f我們看一下上面的例子 資料頭 55 aa 02 有效資料位 04有效資料位的意思是,從這個字元往後數多少位。是他的有效資料 代表數值 01 02 03 04 05 代表校驗碼 0f 首先我們...

C 串列埠通訊

串列埠通訊類 serialportdao.csusing system using system.collections.generic using system.text using system.io.ports namespace ly.fuelstationpos.protocol set ...