在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 在編程中基于事件驅(qū)動的好處

            在編程中基于事件驅(qū)動的好處

            作者: 時間:2012-08-25 來源:網(wǎng)絡(luò) 收藏

            在這幾天的里,我發(fā)現(xiàn)了一個程序如果是基于的,那么起來將會很簡單。比如在輸入命令行遇到回車時向框架發(fā)送一個ON_CMD_OK消息,那么框架就會立即處理ON_CMD_OK消息,而無需再去檢測命令輸入到了什么地方,在框架定時器到達(dá)時,框架也會呼叫我們事先約定好的處理程序,為我們省略了很多細(xì)節(jié)的麻煩。 要編寫基于事件的程序,首先需要理解函數(shù),和char一樣,它保存了一個函數(shù)的地址,調(diào)用指向的函數(shù)和調(diào)用函數(shù)一樣。例如:(我的例程是這樣的) typedef void (*PROC)(MESSAGE_STYLE style,MESSAGE param);// 定義函數(shù)類型,形參為MESSAGE枚舉; PROC fun; static void nullFunction(MESSAGE_STYLE style,MESSAGE param)// 空函數(shù) { printf("nullFunction is called ."); } void main() { fun = nullFunction;// 將指針指向nullFunction; fun(ON_KEYDOWN,WM_0);// 通過指針調(diào)用函數(shù) } 那么,在這個主程序里,nullfunction將收到ON_KEYDOWN和WM_0,意思是按鍵0被按下,調(diào)用nullFunction處理。 ON_KEY_DOWN是一個我們預(yù)先定義的消息類型枚舉,WM_0也一樣。 當(dāng)然了,在實際的里不會像這個那么簡單,我們需要一個數(shù)組來保存指針,然后將消息逐個派遣,讓想知道這個消息的所有程序都能知道這個按鍵被按下了,然后進(jìn)行相應(yīng)的處理。 是否明白點了呢?.... 后來我有個重大發(fā)現(xiàn) 一直以來,我都是使用形參來傳遞消息參數(shù),我的PROC原來是這樣定義的:PROC (*fun)(MESSAGE_TYPE type, MESSAGE param); 在我的Delegate里,消息通過send()函數(shù)將會歷遍所有消息回調(diào),如果我在第一個回調(diào)里增加了一個回調(diào),那么在這個回調(diào)結(jié)束后,新增加的回調(diào)也會收到這個消息,這不是我希望的結(jié)果(我在菜單里選擇了2號菜單,而2號菜單是個命令提示符,那么在增添命令提示符后字符'2'這個消息會傳遞給CMD,那么在進(jìn)入CMD程序之前,CMD實際上已經(jīng)添加了2這個字符在命令行里)。經(jīng)過我的反復(fù)思考,我參考了C#的做法,把后面兩個參數(shù)改為引用類型,改為:PROC (*fun)(MESSAGE_TYPE type, MESSAGE ?m); 那么在第一個回調(diào)里增加另外一個回調(diào)的同時,把param設(shè)置為WM_NULL,就不會發(fā)生上面的情況,而且將更加靈活,我增加了WM_HANDLED,在框架檢測到這個消息后,會放棄之后的回調(diào),因為框架已經(jīng)知道這個消息已經(jīng)不再需要后面的程序處理了。呵呵,總算解決了一個問題。也算是從C#里發(fā)現(xiàn)的一個重大收獲。經(jīng)過這樣的改造,CPU占用率更低了,而且深度的內(nèi)存堆棧也少了些,可以使用更多的內(nèi)存做別的任務(wù)。 八卦一下 PT2313。這是我的第二個AVR的作品。我用MEGA8是因為它的功能深深的吸引著我。以前用51的時候,I2C需要單獨來編寫一個程序來驅(qū)動,ADC需要外置?,F(xiàn)在好了,MEGA8為我解決了這個問題,使得我現(xiàn)在的版本比以前有了很大的進(jìn)步,無論是在體積上還是性能上都有顯著的提高。讓大家來分享一下



            關(guān)鍵詞: 編程 事件驅(qū)動 指針

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉