前言
我們在開發串口通信程序時,有時候會遇到比如單片機或者傳感器發送的數據速度特別快,比如10ms、20ms發送一次,并且每次發送的數據量還比較大,如果按照常規的寫法,我們會發現接收的數據還沒處理完,新的數據又發送過來了,這就會導致處理數據滯后,軟件始終處理的不是最新的數據,本文就是來介紹如何解決高速通信下數據處理慢的問題,看完本篇文章的內容,以后遇到任何高速通信下數據處理慢的問題你都知道怎么解決,無論是串口通信、socket通信,都不是問題。
1、常規錯誤寫法
我們知道串口數據的接收,在高速通信時,發送方是一直不停的發送數據,所以我們在開發中使用被動接收數據的方式,也就是使用串口的DataReceived事件觸發來接收數據,常規的寫法如下:
從上圖可知,在常規寫法中,我們是在DataReceived事件觸發來接收數據,并且接收到數據以后,然后處理數據,處理完數據然后接著接收數據,所以數據處理流程是單線程的,如下:
接收數據-》處理數據-》接收數據
那么很容易看出,處理數據的時候是會占用接收數據的時間的,這就會導致在接收的數據量特別大時,數據來不及處理。