【小白談程式設計】
生產者消費者模式之串列埠資料的接收處理顯示
1、串列埠資料接收問題;2、資料快取類實現;3、多執行緒及其同步問題;4、子執行緒間資料傳遞問題;5、子執行緒資料如何實時更新到介面問題;6、窗體資料傳遞問題。
問題這麼多?誰讓我是小白啊?小白的痛,小白懂!
在開始這個題目之前,先介紹一下例項背景吧。這個程式所做的事情是:從串列埠接收資料,資料形式為位元組流,然後從這些位元組流中按照相關的通訊協議提取出需要的資訊,並將其更新顯示於程式介面。串列埠資料**於上位機,假設上位機按每秒20幀的頻率,幀長50位元組發出資料,
首先,對新手而言,源源不斷的資料如何處理就是乙個麻煩!這從csdn論壇頻繁出現串列埠資料接收相關提問就可見一斑。小白之所以為此頭疼,是因為他們不知道快取是個什麼東西,或者說即便聽說過快取,也知道大體功能,但是快取在**層面上,到底是什麼樣子的仍然是模糊不清的!
其次,資料快取好了,我如何才能準確無誤的提取資訊?為了讓接收方正確解讀出資料資訊,通訊協議中必然會涉及幀結構等資訊,比如幀頭、幀尾或者校驗位等特定標誌位。小白不要問說,會不會沒有這些東西?不會的!要實現通訊,必然要有協議(通俗些叫約定),不然鬼知道你給我的一堆位元組流是什麼意思!好了,有了協議,知道了幀頭幀尾,我從位元組流逐個找就可以了,找到這些標誌位,對應起來了,ok,這部分位元組就是乙個完整的資料幀了(通訊上,這叫幀同步)。繼續看協議,必然有這個資料幀的構成啦,各個欄位佔多少位元組啦,各個字段如何解讀啦!大體這些,我想到這裡,小白們基本就意識到如何解讀這些資料資訊了。好了,協議如何解析,各種場合下根據協議文件來就可以了。如果採用了一些標準協議,比如說谷歌地球支援的一些gps資料協議,那可以到網上下協議文字的,照著協議走就沒問題了。
再次,到這裡,貌似大腦裡面有了乙個大概的解決思路,但是要如何具體實現呢?小白還是會茫然無措。因為這個快取裡面有了一些資料後,我程式馬上開始找資料幀,解析之類,可是那邊資料沒停啊,還在繼續來,我在處理這個資料的時候,那邊串列埠資料不接收了?這裡就涉及乙個多執行緒,靠,對小白而言,多執行緒,多麼高階的名詞呵!好吧,就硬著頭皮上吧,我開乙個執行緒接收串列埠資料,資料進快取,然後我再有乙個執行緒監聽這個快取資料,不斷從裡面取資料找資料幀,找到一幀資料馬上按照通訊協議處理,提取資訊,嗯到這裡,好像有點頭緒了。
其實,作為乙個小白,在這個例項面前,先後會碰到的問題很多,大體有:1、串列埠的資料如何接收?2、多執行緒如何實現?3、多執行緒如何同步?4、快取是什麼樣子的,怎麼實現?5、執行緒資料如何更新顯示到介面?
我們先解決乙個快取的問題,資料接收執行緒不停的接收資料,然後往快取寫資料,資料處理執行緒則不停的從緩訪問資料,結合看了生產者消費者相關資料,小白們開始了解到環形快取這麼個東東!環形快取,形象又陌生,我們換個簡單的通俗的名字:迴圈陣列。那如何實現?直接上我寫的乙個非常簡陋,但實用的類。
(2015/9/16)先寫到這裡,後面繼續!
c DLL程式設計之一
dll的優點 簡單的說,dll有以下幾個優點 1 節省記憶體。同乙個軟體模組,若是以源 的形式重用,則會被編譯到不同的可執行程式中,同時執行這些exe時這些模組的二進位製碼會被重複載入到記憶體中。如果使用dll,則只在記憶體中載入一次,所有使用該dll的程序會共享此塊記憶體 當然,像dll中的全域性...
RAPI程式設計之一
今天剛開始學習rapi程式設計,先將今天學習的成果放出來,大家學習。如果 有問題,請提出,多謝 在pc上使用vc6,好久沒有用它了。一直在evc4下程式設計,呵呵.rapi功能的實現,需要rapi.dll和rapi.h。在以下的實現中,link的動態庫是c windows system32 rapi...
如何學習程式設計之一?
第乙個階段 什麼都不會。不會就先抄你老師給你們寫的例子,不准複製,要乙個字乙個字的敲。放心,其 中肯定會遇到問題,先自己想想問題怎麼解決,能解決就盡量自己解決,不能就 看你老師源 第二個階段 知道大概了。但是要自己寫還是寫不出來,這個時候你要先看你老師 知道大概的思路。然後你以自己的思路開始寫,開始...