爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3637|回复: 0

基于SqlServer2008的MATLAB GUI应用程序开发(4):timer对象的使用与多线程的操作

[复制链接]

新浪微博达人勋

发表于 2014-7-14 19:14:27 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表