鉴于 Matlab 中缺乏多线程机制,使用 Timer 无疑是一个很重要的工具,Matlab 中 Timer 是一个 Java 对象。
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 为固定频率。当然前面所说的都是在这个前提之上。
关于 TimerFcn 的定义
当以 TimerFcn 的定义默认必须有两个参数
function ExcuteTask(obj,eventdata)
% TODO
end
其中 obj 为执行该函数所对应的 timer 对象,eventdata 为事件数据,一般里面为具体时间。
当需要在 ExcuteTask 中传入参数的时候,那么 Timer 可以这样定义:
set(t,'TimerFcn',{@ExecuteTask,var1});
那么这时函数定义应该为:
function ExcuteTask(obj,eventdata,var1)
% TODOend
其他函数的定义也类似。
t=[0]
lh=plot(t,sin(t),'-');
t=timer(...
'Name','FebirdTimer',...
'TimerFcn',@ExecuteTask,...
'ErrorFcn',@ExecuteError,...
'Period',1,...
'ExecutionMode','fixedrate');
ud=struct{'linehanle',lh,'count',0} ;
set(t,'UserData',ud);
function ExcuteTask(obj,eventdata)
ud=obj.UserData;
l=ud.linehandle;
c=ud.count;
t=get(l,'XData');
y=get(l,'YData');
t=[t count];
y=[y sin(0.1*count)];
set(lh,'XData',t,'YData',y);
drawnowud.count=ud.count+1;
set(obj,'UserData',ud);
end
以上给出了一个使用 Timer 画图的方法
关于 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');
已有 gui.m 文件和 gui.fig 文件
1.在 matlab 的 command 窗口中输入
mcc -B sgl GUI.m
2.将上步生成的文件包括*m 文件和*.fig 文件一起考到待运行的机器
此时仍需 matlab 所必需的动态连接库。
3. 将 路径: 4.在机器上先运 mglinstallar.exe(MCRInstaller.exe), 然后选择解压目录,将在将在指定目录下解压缩出 bin 和 toolbox 两个子目录, 其中在 bin\\win32 目录下就是数学库和图形库脱离 MATLAB 运行所需的所有动态连接库,共有37 个。可以将这些.dll 考入 system32, 也可以直接放在应用程序目录下。 而 toolbox 目录则必须与应用程序同一目录。 5.大功告成。 mcc -m GUIchengxu so easy!下载本文