我想在MATLAB GUI中执行中间暂停一个定时器功能(持续5秒)。 Pause(5)
可以做到,但问题是它暂停所有其他回调函数的执行(例如我在MATLAB GUI中使用的其他定时器函数)。
我想想也许我可以写一个可以执行5秒的虚拟循环,但它可能不准确和有效。你有什么建议吗?
其他信息:
handles.maintmr = timer(...
'ExecutionMode', 'fixedRate', ...
'TasksToExecute',1,'StartDelay',299, 'Period', 1,...
'TimerFcn', {@ttl_timer, hObject});
handles.et_tmr = timer(...
'ExecutionMode', 'fixedRate', ...
'Period', 0.5, ...
'TimerFcn', {@timer_ET_rec, hObject});
handles.tmr = timer(...
'ExecutionMode', 'fixedRate', ...
'Period', 9.85, ...
'TimerFcn', {@timer_update_display, hObject});
这些是我在MATLAB GUI中使用的已定义的三个定时器函数
这就是我调用回调定时器函数的方法:
function timer_ET_rec(obj,event,hObject,eventdata)
handles = guidata(hObject);
function timer_update_display(obj,event,hObject,eventdata)
handles = guidata(hObject);
function ttl_timer(obj,event,hObject,eventdata)
handles= guidata(hObject);
答案 0 :(得分:3)
我会尝试像
这样的东西t = tic();
while toc(t) < 5
pause(0.1);
drawnow('limitrate');
end
答案 1 :(得分:0)
我喜欢Edric的解决方案。其他选择:
选项1
waitfor(obj)
函数(中断执行直到删除对象&#39; obj&#39;)。
例如
%Pop-up msg;
h1 = errordlg({'This message interrupts the code. Close me to continue'},...
'Hi! I'm a pop-up')
% interrupt until closed
waitfor(h1)
选项2
timer()
功能不会在挂钟处运行(即实际的现实世界时间),所以我不确定它能做什么你看似什么 - 保持定期执行无论代码中的中断和暂停如何,每隔x
分钟编码一次。但是有些方法可以接近它。
a)如果你已经根据挂钟时间通过了特定的时间段(如果声明带有clock()
),则使用定时器功能定期测试。如果是这样,请执行其他一些代码。
b)将计时器'BusyMode'
从假定的默认'drop'
更改为'queue'
,它将插入代码以尽可能接近所需时间运行。
最佳解决方案取决于您想要达到的目标。