在MATLAB中有暂停功能的替代方案吗?

时间:2018-04-05 14:18:11

标签: matlab matlab-guide

我想在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);

2 个答案:

答案 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',它将插入代码以尽可能接近所需时间运行。

最佳解决方案取决于您想要达到的目标。