串列埠通訊的一般思路是:先接收資料,然後處理資料,並在資料處理之後再次等待接收新的資料。但這種方法的缺點是,在串列埠高速率大資訊量通訊時,會出現丟失資料的情況。
丟失資料的原因是資料接收和資料處理再同乙個執行緒中,如果資料處理的時間太長,則來不及接收的資料只能暫存在快取中。因此,一旦快取滿了,新到的資料就會沖刷掉未來得及接收的資料,從而造成資料的丟失。因此,只是增加快取的容量不能解決資料丟失的根本問題。
解決思路:
資料接收與資料處理分別放在兩個執行緒中進行;
資料接收執行緒:接收資料並將接收到的資料存入資料池中;
資料處理執行緒:從資料池中讀取資料和處理資料;
注意:由於兩個執行緒可能會同時訪問資料池,因此為了使資料接收得到最快的響應,最好不選用陣列結構,而是選用佇列queue作為資料池的資料結構。
佇列在順序儲存方面非常有用。資料物件在佇列的一段插入,另一端移除。當兩個執行緒同時訪問佇列時,乙個執行緒負責資料存入,另乙個執行緒只負責運算元讀取,就會提高程式的執行效率。
**:資料接收執行緒:
receivethread()
資料處理執行緒:
dealdatathread()
}
串列埠通訊丟失資料結局方案 C
串列埠通訊的一般思路是 先接收資料,然後處理資料,並在資料處理之後再次等待接收新的資料。但這種方法的缺點是,在串列埠高速率大資訊量通訊時,會出現丟失資料的情況。丟失資料的原因是資料接收和資料處理再同乙個執行緒中,如果資料處理的時間太長,則來不及接收的資料只能暫存在快取中。因此,一旦快取滿了,新到的資...
基於Unity串列埠通訊的解決方案
我開發過三個專案採用收發字串 unity接收字串,傳送字串 收發單個位元組 unity接收單位元組,傳送位元組陣列 收發位元組陣列。三個專案都是unity通過串列埠與winform程式 或wpf程式 進行串列埠通訊。結合我實際專案,來講解!以專案三方式為例。在專案三中說過,unity中接收單個位元組...
PHP 表單提交 資料報丟失 解決方案
這裡我的環境是linux 下面是修改的幾個地方 vim etc php php.ini 修改以下幾處 max input vars 預設情況下是1000 不能滿足有1000個以上輸入項的需求,所以得在php.ini 裡面加上更大的值如 修改 post max size 設定 post 資料所允許的最...