- 积分
- 1931
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-4-6
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 haobang008 于 2014-7-14 21:41 编辑
MATLAB大部分情况下是执行单线程操作,但是Timer对象提供了进行多线程操作的办法,下面是timer的一些基本参数说明
一、Timer对象的创建
T = timer
T = timer('PropertyName1', PropertyValue1, 'PropertyName2', PropertyValue2,...)
括号中的参数可以在创建Timer是给出,也可以通过以后的set/get命令设置和读取
二、Timer属性参数
1.属性设置
(1)创建的时候直接赋值
%创建一个Timer对象变量TaskTimer,并给出部分参数
TaskTimer=timer(...
'Name','Matlabsky',...
'TimerFcn',@ExecuteTask,...
'ErrorFcn',@ExecuteError,...
'Period',1,...
'ExecutionMode','fixedrate');
(2)使用set/get设置和读取
%创建一个默认的Timer对象
TaskTimer=timer
set(TaskTimer,'Name','Matlabsky','TimerFcn',@ExecutTask)
get(TaskTimer,'Name')
其实set/get的使用方法不只这个,还其他形式,特别是在同时设置多个句柄的多个属性时,特别方便,感兴趣的网友可以直接参考Matlab的帮助文档
(3)使用结构体设置
TaskTimer=timer
TaskTimer.Name='Matlabsky'
TaskTimer.TimerFcn=@ExecutTask
2.常用属性(下面是几个比较重要的,希望大家掌握)
(1)ExecutionMode 执行的模式
就是确定TimerFcn执行周期计算的始末点
'singleShot' :只能执行一次,故Period属性不起作用,其他模式都可以执行多次
'fixedSpacing' :上一次TimerFcn执行完毕时刻到下一次TimerFcn被加入队列时刻之间的间隔
'fixedDelay' :上一次开始执行到下一次被加入队列之间的间隔
'fixedRate' :前后两次被加入到执行语句队列时刻之间的间隔
(2)Period 时间间隔(执行周期)
也就是每个Period执行一次TimerFcn,执行周期到底指的是哪两个时刻之间的间隔由ExecutionMode决定
(3)StartDelay 启动时延
从启动Timer开始到第一次把TimerFcn的加入到Matlab的执行语句队列中去的时延, 默认值为0s
(4)TasksToExecute 执行次数
TimerFcn被执行的次数,默认为1次,设置多次时需要设置执行周期Period
(5)TimerFcn Timer函数
是Timer对象的核心,Timer的多线就是通过执行这个TimerFcn来实现的,也是Timer对象的必选参数
当然还有其它属性,但是相对来说比较次要,更详细的说明,感兴趣网友可以自己查看MATLAB帮助文档
三、time对象的回调函数callback
1.callback的建立
Timer对象的回调函数有TimerFcn、ErrorFcn、StartFcn和StopFcn,其中TimerFcn是必选的
Timer的所有回调函数callback,至少有两个输入参数obj和event,其经典格式为
function my_callback_fcn(obj,event,p1, p2)
%by dynamic
%20092.15
%
%obj和event为必选输入参数
%
%obj就是前面创建的Timer对象,它包含着Timer的所有参数
%
%event是一个结构体,包含Type和Data两个字段,Type保存的是当前的Timer对象执行的时间,比如StartFcn、StopFcn等
%
%而Data还是一个结构体,包含time一个字段,保存的是执行该事件的系统时间
%
%所以event的使用是event.Type获取Timer到底在执行哪个事件,event.Data.time或者执行该时间的系统时间
%
%p1,p2...等是其它自定义的输入参数,根据需要在自己添加
2.回调函数的属性值
- 回调函数 属性值
- function myfcn(obj,event) set(T,'StartFcn','myfcn')或者T.StartFcn='myfcn'(下同)
- function myfcn(obj,event) set(T,'StartFcn',@myfcn)(同上)
- function myfcn(obj,event,p1,p2) set(T,'StartFcn',{'myfcn',p1,p2})或者T.StartFcn={'myfcn',p1,p2}(下同)
- function myfcn(obj,event,p1,p2) set(T,'StartFcn',{@myfcn,p1,p2})(同上)
3.回调函数实例
- function TimerFcn_callback(obj,event,var)
- txt=' event occurred at ';
- event_type = event.Type;%获取当前事件
- event_time = datestr(event.Data.time);
- msg = [event_type txt event_time];
- disp('Hello it's Matlabsky Timer Object Demo')
- disp('Now! Begin...')
- disp(msg)
- x=2*pi*[-1:0.01:1];
- y=var*sin(var*x)+var
- plot(x,y)
四、Timer对象应用实例
- function matlabsky_timer_demo
- %
- %by dynamic
- %see also http://www.matlabsky.com
- %2009.1.23
- %
- clc
- %创建Timer对象
- T = timer('TimerFcn',@TimerFcn, 'StartDelay',10,'StartFcn',@StartFcn);
- %启动Timer
- start(T);
- %开始循环
- while T.userdata=='f'
- disp('Love Matlab Love Matlabsky——Timer Object Demo');
- pause(1)
- end
- %终止Timer
- stop(T);
- function TimerFcn(obj, event)
- %10s后终止程序
- obj.userdata='t';
- disp(['the BeiJing time is ' datestr(event.Data.time)])
- disp('10s Has Escaped, Following The Orde of TimerFcn, Now I Have To Stop This Progam!')
- function StartFcn(obj,event)
- obj.userdata='f';
- disp(['the BeiJing time is ' datestr(event.Data.time)])
- disp('The Timer Object Demo Begin Now!')
参考链接:
(1)http://www.matlabsky.com/thread-646-1-1.html
(2)http://blog.sina.com.cn/s/blog_4ccd1cd101000bak.html
(3)http://www.ilovematlab.cn/thread-258845-1-1.html
|
|