




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MATLAB先天的多線程殘疾,給編寫實(shí)時(shí)程序帶來了致命的打擊。一般情況只能按堆棧的形式,排隊(duì)執(zhí)行Matlab命令,可是無巧不成書,有時(shí)我們偏偏需要進(jìn)行多線程和實(shí)時(shí)編程。比如:1.我想實(shí)時(shí)更新一個(gè)電子表的時(shí)間,也就是每1s讀取一次系統(tǒng)時(shí)間或者自動(dòng)加1s2.我需要這個(gè)程序在10s后終止明顯這些需要,使用一般的Matlab編程是沒法或者說很難實(shí)現(xiàn)的。還好Matlab自知在這方面虧欠大家太多,提供了唯一一個(gè)多線程的實(shí)現(xiàn)方法Timer對(duì)象一、Timer對(duì)象的創(chuàng)建T = timerT = timer('PropertyName1', PropertyValue1, 'Propert
2、yName2', PropertyValue2,.)括號(hào)中的參數(shù)可以在創(chuàng)建Timer是給出,也可以通過以后的set/get命令設(shè)置和讀取二、Timer屬性參數(shù)1.屬性設(shè)置(1)創(chuàng)建的時(shí)候直接賦值%創(chuàng)建一個(gè)Timer對(duì)象變量TaskTimer,并給出部分參數(shù)TaskTimer=timer(. 'Name','Matlabsky',. 'TimerFcn',ExecuteTask,. 'ErrorFcn',ExecuteError,. &
3、#160; 'Period',1,. 'ExecutionMode','fixedrate'); (2)使用set/get設(shè)置和讀取%創(chuàng)建一個(gè)默認(rèn)的Timer對(duì)象TaskTimer=timerset(TaskTimer,'Name','Matlabsky','TimerFcn',ExecutTask)get(TaskTimer,'Name')其實(shí)set/get的使用方法不只這個(gè),還其他形式,特別是在同時(shí)設(shè)置多個(gè)句柄的多個(gè)屬性時(shí),特別方便
4、,感興趣的網(wǎng)友可以直接參考Matlab的幫助文檔(3)使用結(jié)構(gòu)體設(shè)置TaskTimer=timerTaskTimer.Name='Matlabsky'TaskTimer.TimerFcn=ExecutTask2 / 72.常用屬性(下面是幾個(gè)比較重要的,希望大家掌握)(1)ExecutionMode 執(zhí)行的模式就是確定TimerFcn執(zhí)行周期計(jì)算的始末點(diǎn)'singleShot' :只能執(zhí)行一次,故Period屬性不起作用,其他模式都可以執(zhí)行多次'fixedSpacing' :
5、上一次TimerFcn執(zhí)行完畢時(shí)刻到下一次TimerFcn被加入隊(duì)列時(shí)刻之間的間隔'fixedDelay' :上一次開始執(zhí)行到下一次被加入隊(duì)列之間的間隔 'fixedRate' :前后兩次被加入到執(zhí)行語句隊(duì)列時(shí)刻之間的間隔(2)Period 時(shí)間間隔(執(zhí)行周期)也就是每個(gè)Period執(zhí)行一次TimerFcn,執(zhí)行周期到底指的是哪兩個(gè)時(shí)刻之間的間隔由ExecutionMode決定(3)StartDelay
6、160; 啟動(dòng)時(shí)延從啟動(dòng)Timer開始到第一次把TimerFcn的加入到Matlab的執(zhí)行語句隊(duì)列中去的時(shí)延, 默認(rèn)值為0s (4)TasksToExecute 執(zhí)行次數(shù)TimerFcn被執(zhí)行的次數(shù),默認(rèn)為1次,設(shè)置多次時(shí)需要設(shè)置執(zhí)行周期Period(5)TimerFcn Timer函數(shù)是Timer對(duì)象的核心,Timer的多線就是通過執(zhí)行這個(gè)TimerFcn來實(shí)現(xiàn)的,也是Timer對(duì)象的必選參數(shù)當(dāng)然還有其它屬性,但是相對(duì)來說比較次要
7、,更詳細(xì)的說明,感興趣網(wǎng)友可以自己查看MATLAB幫助文檔三、回調(diào)函數(shù)callback1.callback的建立Timer對(duì)象的回調(diào)函數(shù)有TimerFcn、ErrorFcn、StartFcn和StopFcn,其中TimerFcn是必選的Timer的所有回調(diào)函數(shù)callback,至少有兩個(gè)輸入?yún)?shù)obj和event,其經(jīng)典格式為1. function my_callback_fcn(obj,event,p1, p2)2. %by dynamic3. %see also 4. %20092.155. %6. %obj和event為必選輸入?yún)?shù)7. %8. %obj就是前面創(chuàng)建的Timer對(duì)象,它包
8、含著Timer的所有參數(shù)9. %10. %event是一個(gè)結(jié)構(gòu)體,包含Type和Data兩個(gè)字段,Type保存的是當(dāng)前的Timer對(duì)象執(zhí)行的時(shí)間,比如StartFcn、StopFcn等11. %12. %而Data還是一個(gè)結(jié)構(gòu)體,包含time一個(gè)字段,保存的是執(zhí)行該事件的系統(tǒng)時(shí)間13. %14. %所以event的使用是event.Type獲取Timer到底在執(zhí)行哪個(gè)事件,event.Data.time或者執(zhí)行該時(shí)間的系統(tǒng)時(shí)間15. %16. %p1,p2.等是其它自定義的輸入?yún)?shù),根據(jù)需要在自己添加復(fù)制代碼2.回調(diào)函數(shù)的屬性值1. 回調(diào)函數(shù)
9、 屬性值2. function myfcn(obj,event) set(T,'StartFcn','myfcn')或者T.StartFcn='myfcn'(下同)3. function myfcn(obj,event)
10、 set(T,'StartFcn',myfcn)(同上)4. function myfcn(obj,event,p1,p2) set(T,'StartFcn','myfcn',p1,p2)或者T.StartFcn='myfcn',p1,p2(下同)5. function myfcn(obj,event,p1,p2) set(T,'StartFcn
11、39;,myfcn,p1,p2)(同上)復(fù)制代碼3.回調(diào)函數(shù)實(shí)例1. function TimerFcn_callback(obj,event,var)2.3. txt=' event occurred at '4.5. event_type = event.Type;%獲取當(dāng)前事件6. event_time = datestr(event.Data.time);7. msg = event_type txt event_time;8. disp('Hello it's Matlabsky Timer Object Demo')9. disp('
12、Now! Begin.')10. disp(msg)11.12. x=2*pi*-1:0.01:1;13. y=var*sin(var*x)+var14. plot(x,y)復(fù)制代碼四、Timer對(duì)象應(yīng)用實(shí)例1.2. function matlabsky_timer_demo3. %4. %by dynamic5. %see also 6. %2009.1.237. %8. clc9. %創(chuàng)建Timer對(duì)象10. T = timer('TimerFcn',TimerFcn, 'StartDelay',10,'StartFcn',Start
13、Fcn);11. %啟動(dòng)Timer12. start(T);13. %開始循環(huán)14. while T.userdata='f' 15. disp('Love Matlab Love MatlabskyTimer Object Demo');16. pause(1)17. end18. %終止Timer19. stop(T);20. 21. function TimerFcn(obj, event)22. %10s后終止程序23. obj.user
14、data='t'24. disp('the BeiJing time is ' datestr(event.Data.time)25. disp('10s Has Escaped, Following The Orde of TimerFcn, Now I Have To Stop This Progam!')26.27. function StartFcn(obj,event)28. obj.userdata='f'29. disp('the BeiJing time is ' datestr(event.Dat
15、a.time)30. disp('The Timer Object Demo Begin Now!')復(fù)制代碼程序運(yùn)行結(jié)果為1. the BeiJing time is 17-Feb-2009 13:36:052. The Timer Object Demo Begin Now!3. Love Matlab Love MatlabskyTimer Object Demo4. Love Matlab Love MatlabskyTimer Object Demo5. Love Matlab Love MatlabskyTimer Object Demo6. Love Matlab
16、 Love MatlabskyTimer Object Demo7. Love Matlab Love MatlabskyTimer Object Demo8. Love Matlab Love MatlabskyTimer Object Demo9. Love Matlab Love MatlabskyTimer Object Demo10. Love Matlab Love MatlabskyTimer Object Demo11. Love Matlab Love MatlabskyTimer Object Demo12. Love Matlab Love MatlabskyTimer
17、Object Demo13. the BeiJing time is 17-Feb-2009 13:36:1514. 10s Has Escaped, Following The Orde of TimerFcn, Now I Have To Stop This Progam!復(fù)制代碼這里還一個(gè)Timer對(duì)象在【股票瀏覽器】GUI中的應(yīng)用的實(shí)例,感興趣的可以看看五、與Timer相關(guān)的其它函數(shù)timer 創(chuàng)建Timer對(duì)象set/get 設(shè)置/獲取Timer屬性start 啟動(dòng)Timerstartat 在指定時(shí)間啟動(dòng)Timers
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 付費(fèi)搭建店鋪合同范本
- 內(nèi)墻抹灰施工合同范本
- 農(nóng)民工工資付款合同范本
- 關(guān)于規(guī)范使用合同范本
- 辦公輔助崗位合同范本
- 住宅消防維修采購合同范本
- mind+ 星球大戰(zhàn) 教學(xué)設(shè)計(jì)
- 出售貨架合同范本
- 與勞務(wù)外包簽訂合同范本
- 勘探合同屬于合同范本
- 2024年廣東省2024屆高三高考模擬測試(一)一模 化學(xué)試卷(含答案)
- 半導(dǎo)體行業(yè)質(zhì)量管理與質(zhì)量控制
- 2024年山東省春季高考技能考試汽車專業(yè)試題庫-下(判斷題匯總)
- 部編版道德與法治二年級(jí)下冊(cè)第三單元 綠色小衛(wèi)士 單元作業(yè)設(shè)計(jì)
- 戲曲鑒賞完整版剖析課件
- 《幼兒園經(jīng)營與管理》課件
- 熱化學(xué)儲(chǔ)熱耦合高溫相變儲(chǔ)熱多物理場協(xié)同調(diào)控機(jī)理
- 趙匡胤:中國北宋時(shí)期的開國皇帝2
- 中國紡織服裝制造業(yè)年度授信政策指引研究報(bào)告
- 零基礎(chǔ)學(xué)機(jī)器學(xué)習(xí)
- 西方繪畫藝術(shù)流派(最全)課件
評(píng)論
0/150
提交評(píng)論