我有一个函数func1
调用另一个函数func2
,而这又开始timer object。我需要func1
暂停,直到计时器停止。我怎样才能做到这一点?如何使MATLAB函数等待,直到定时器停止运行
定时器不是SingleShot定时器,但定时器定时器在其TimerFcn中测试的条件下使用stop()
停止。
我有一个函数func1
调用另一个函数func2
,而这又开始timer object。我需要func1
暂停,直到计时器停止。我怎样才能做到这一点?如何使MATLAB函数等待,直到定时器停止运行
定时器不是SingleShot定时器,但定时器定时器在其TimerFcn中测试的条件下使用stop()
停止。
使用wait()
,直到计时器停止暂停执行:
function func1
thandle = func2;
wait(thandle)
disp(1)
end
function h = func2
h = timer('StartFcn',@(ev,obj)fprintf('Started timer'),'TimerFcn',@(ev,obj)pause(2));
start(h)
end
注意func2()
是一个子功能func1()
,但也可以是外部函数,唯一的要求是它返回到timer
对象的句柄。
通过在命令窗口中简单调用foo
来尝试该示例。
此解决方案不因为我的计时器有无限数量的任务要执行,并且使用“stop()”来停止。我得到这个错误:“不能用一个具有无限TasksToExecute的计时器等待。” 函数th = subfoo 全球h; %h = timer('StartFcn',@(ev,obj)fprintf('Started timer'),'TimerFcn',@(ev,obj)pause(5)); th = timer('Name ','Refresher','TimerFcn',@ refresherCallback,'ExecutionMode','fixedRate','Period',0.5); h = th; start(th) end func全球h;回忆(〜,〜) 全球h; counter = get(h,'TasksExecuted');如果(计数器> 10) 停止(h);如果(计数器> 10) 停止 结束 结束 – Bedo
@Bedo阐述你的原始问题,给你想要完成的更多的上下文。否则,不可能为通用问题提供工作解决方案。 – Oleg
是的,对不起。原始问题包含所有需要的细节。我刚刚添加了一个事实,即定时器不是SingleShot,而是在其TimerFcn中测试的条件下停止的定时器定时器。 – Bedo
定时器在它调用'@ timerCallback'时不会停止,而只会在它完成调用回调(多次定义,但默认只有一次)之后停止。 – Oleg
是的,你是对的,当它完成调用回调时计时器停止,但我仍然有问题 – Bedo
请提供一个http://sscce.org – Oleg