Matlab中用Timer实现多线程机制

Matlab中Timer的使用

鉴于Matlab 中缺乏多线程机制,使用Timer 无疑是一个很重要的工具,Matlab 中Timer 是一个Java 对象。

(1) Timer 的定义 

t=timer();

设置属性:

eg.  set(t,‘Name‘,‘your_timer_name‘);

当然可以一次性设置完成:

例如:

TaskTimer=timer(...

‘Name‘,‘FebirdTimer‘,...

‘TimerFcn‘,@ExecuteTask,...

‘ErrorFcn‘,@ExecuteError,...

‘Period‘,1,...

‘ExecutionMode‘,‘fixedrate‘);

这里TimerFcn 为Timer 执行的函数,后面的‘@ExcuteTask’  就是你定义的函数名

同样ErrorFcn 也是一样。

Period 为执行周期,ExecutionMode 为执行模式,fixedrate 为固定频率。当然前面所说的都是在这个前提之上。

(2) 关于TimerFcn 的定义

当以TimerFcn 的定义默认必须有两个参数

function ExcuteTask(obj,eventdata)

% TODO

end

其中obj 为执行该函数所对应的timer 对象,eventdata 为事件数据,一般里面为具体时间。

当需要在ExcuteTask 中传入参数的时候,那么Timer 可以这样定义:

那么这时函数定义应该为:

function ExcuteTask(obj,eventdata,var1)

% TODO

end

其他函数的定义也类似。

(3) 关于UserData 

UserData 在Timer 比较有用,因为当时用上面的方法传递参数是,Matlab 只会在第一次传入参数。

所以我们可以在UserData 这个域中保存我们的数据。

例如:

t=[0];

lh=plot(t,sin(t),‘-‘);

t=timer(...

‘Name‘,‘MyTimer‘,...

‘TimerFcn‘,@ExecuteTask,...

‘ErrorFcn‘,@ExecuteError,...

‘Period‘,1,‘TasksToExecute‘,100,...

‘ExecutionMode‘,‘fixedrate‘);

ud=struct(‘linehandle‘,lh,‘count‘,0);

set(t,‘UserData‘,ud);

start(t);

function ExecuteTask(obj,eventdata,UserData) ;

ud=obj.UserData;

l=ud.linehandle;

c=ud.count;

t=get(l,‘XData‘);

y=get(l,‘YData‘);

t=[t c];

y=[y sin(0.1*c)];

set(ud.linehandle,‘XData‘,t,‘YData‘,y);

drawnow; %一般放置在set命令后,用于重构刷新图形。

ud.count=ud.count+1;

set(obj,‘UserData‘,ud);

end

以上给出了一个使用Timer 画图的方法。

(4) 关于Timer 的函数 

1.start();

2.stop();

3.timerfind();

eg.删除所有的timer

ts=timerfind;

if length(ts)>0

stop(ts);

delete(ts);

end

通过Name 查找特定的Timer:

t=timerfind(‘Name‘,‘FebirdTimer‘);

例如:

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton1 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

tb= timer(‘Name‘,‘ButtonTimer‘,‘StartDelay‘, 4,‘Period‘, 4,‘TasksToExecute‘, 2,...

‘ExecutionMode‘,‘fixedRate‘);

tb.StartFcn = {‘my_callback_fcn‘, ‘My start message‘};

tb.StopFcn = { @my_callback_fcn, ‘My stop message‘};

tb.TimerFcn = @(x,y)disp(‘Hello World!‘);

start(tb);

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton3 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

tb=timerfind(‘Name‘,‘ButtonTimer‘);

if length(tb)>0

stop(tb);

delete(tb);

end

function my_callback_fcn(obj, event, string_arg)%传入参数,前两个为默认参数

%其中event.Type为回调函数类型,event.Data为回调函数数据

txt1 = ‘ event occurred at ‘;

txt2 = string_arg;

event_type = event.Type;%get type

event_time = datestr(event.Data.time);%get timer period

msg = [event_type txt1 event_time];

disp(msg)

disp(txt2)

end

以上给出了通过GUI button 按钮来控制timer开始和终止的方法。

时间: 2024-10-15 19:42:47

Matlab中用Timer实现多线程机制的相关文章

关于Matlab中用timer来实现多线程机制

Timer 计时器 MATLAB的计时器主要用于完成动画任务及定时任务. Construct timer object 构造一个计时器对象 Syntax T = timer T = timer('PropertyName1', PropertyValue1, 'PropertyName2', PropertyValue2,...) Discription T = timer constructs a timer object with default attributes. 利用默认属性构造一个

Java的多线程机制系列:不得不提的volatile及指令重排序(happen-before)

一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它.比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools, * initialized to indicate thread 'not yet started' */   p

【转帖】MATLAB中用FDATool设计滤波器及使用

MATLAB中用FDATool设计滤波器及使用 该文章讲述了MATLAB中用FDATool设计滤波器及使用. 1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool.具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool. 2. 在fdatool工具中应该注意的几个问题:(a)Fstop(阻带截止频率)不能大于或等于采样频率Fs/2,这是由于数字滤波器设计的方式决定的.(b)将设计好的滤波器

android中的多线程机制

Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制.学习Android的消息处理机制,有几个概念(类)必须了解: 1.       Message 消息,理解为线程间通讯的数据单元.例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程. 2.       Message Queue 消息队列,用来存放通过Handler发布的消息,按照先进先出执行. 3.       Handler Handler是Messa

matlab中用来批量读取的dir函数

Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中. dir函数可以有调用方式dir('.') 列出当前目录下所有子文件夹和文件dir('G:\Matlab') 列出指定目录下所有子文件夹和文件dir('*.m') 列出当前目录下符合正则表达式的文件夹和文件 得到的为结构体数组每个元素都是如下形式的结构体 name -- filename date -- modification date bytes -- number of bytes alloc

《python源码剖析》笔记 python多线程机制

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.GIL与线程调度 Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用 为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL. GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下

Java的多线程机制:缓存一致性和CAS

Java的多线程机制:缓存一致性和CAS 一.总线锁定和缓存一致性 这是两个操作系统层面的概念.随着多核时代的到来,并发操作已经成了很正常的现象,操作系统必须要有一些机制和原语,以保证某些基本操作的原子性,比如处理器需要保证读一个字节或写一个字节是原子的,那么它是如何实现的呢?有两种机制:总线锁定和缓存一致性. 我们知道,CPU和物理内存之间的通信速度远慢于CPU的处理速度,所以CPU有自己的内部缓存,根据一些规则将内存中的数据读取到内部缓存中来,以加快频繁读取的速度.我们假设在一台PC上只有一

Java学习笔记—第十一章 多线程机制

第十一章 Java多线程机制 了解Java中的进程与线程 1.1 进程:一般程序的结构大致可分为一个入口.一个出口和一个顺序执行的语句序列.程序运行时,系统从程序入口开始,按照语句的执行顺序(包括顺序.分支和循环)完成相应指令,然后从出口退出,程序结束.这样的结构称为进程.可以说,进程就是程序的一次动态执行的过程.一个进程既包括程序的代码,同时也包括系统的资源,如CPU.内存空间等.不同的进程所占用的系统资源都是独立的. 1.2 线程:线程是比进程更小的执行单位.一个进程在执行过程中,为了同时完

《Exploring in UE4》多线程机制详解[原理分析]

转自:https://zhuanlan.zhihu.com/c_164452593 目录一.概述二."标准"多线程三.AsyncTask系统3.1 FQueuedThreadPool线程池3.2 Asyntask与IQueuedWork3.3 其他相关技术细节四.TaskGraph系统4.1 从Tick函数谈起4.2 TaskGraph系统中的任务与线程4.3 TaskGraph系统中的任务与事件4.4 其他相关技术细节五.总结 一.概述 多线程是优化项目性能的重要方式之一,游戏也不例