2013-08-21 122 views
0

我有一个函数func1调用另一个函数func2,而这又开始timer object。我需要func1暂停,直到计时器停止。我怎样才能做到这一点?如何使MATLAB函数等待,直到定时器停止运行

定时器不是SingleShot定时器,但定时器定时器在其TimerFcn中测试的条件下使用stop()停止。

+2

定时器在它调用'@ timerCallback'时不会停止,而只会在它完成调用回调(多次定义,但默认只有一次)之后停止。 – Oleg

+0

是的,你是对的,当它完成调用回调时计时器停止,但我仍然有问题 – Bedo

+0

请提供一个http://sscce.org – Oleg

回答

3

使用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来尝试该示例。

+0

此解决方案不因为我的计时器有无限数量的任务要执行,并且使用“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

+1

@Bedo阐述你的原始问题,给你想要完成的更多的上下文。否则,不可能为通用问题提供工作解决方案。 – Oleg

+0

是的,对不起。原始问题包含所有需要的细节。我刚刚添加了一个事实,即定时器不是SingleShot,而是在其TimerFcn中测试的条件下停止的定时器定时器。 – Bedo

2

您可以将计时器对象返回FUNC1和执行等待循环有:

while strcmp(to.Running, 'on') 
    % Do Nothing 
end 
+0

如果func1和func2在两个不同的.m文件?这是一个忙碌的等待?忙碌的等待对我来说是不可接受的... – Bedo

+0

不,它会一直等到定时器停止运行,或者它正在停止或它已经完成其执行命令。 – Nick

+0

我尝试过,但它的工作原理,但while循环是一个繁忙的等待和Matlab使用我的CPU的100%没有(和很多时间)。这不是一个好主意:( – Bedo

相关问题