Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使MATLAB函数等待计时器停止运行_Matlab_Function_Timer - Fatal编程技术网

如何使MATLAB函数等待计时器停止运行

如何使MATLAB函数等待计时器停止运行,matlab,function,timer,Matlab,Function,Timer,我有一个函数func1,该函数调用另一个函数func2,该函数反过来启动一个函数。我需要func1暂停,直到计时器停止。我该怎么做 计时器不是单次触发计时器,而是在其TimerFcn中测试的条件下使用stop()停止的周期计时器。您可以将计时器对象返回到func1并在那里实现等待循环: while strcmp(to.Running, 'on') % Do Nothing end 您可以将计时器对象返回到func1并在那里实现等待循环: while strcmp(to.Running,

我有一个函数
func1
,该函数调用另一个函数
func2
,该函数反过来启动一个函数。我需要
func1
暂停,直到计时器停止。我该怎么做


计时器不是单次触发计时器,而是在其TimerFcn中测试的条件下使用
stop()
停止的周期计时器。

您可以将计时器对象返回到func1并在那里实现等待循环:

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

您可以将计时器对象返回到func1并在那里实现等待循环:

while strcmp(to.Running, 'on')
    % Do Nothing
end
用于在计时器停止前停止执行:

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()
的子函数,但也可以是外部函数,唯一的要求是它将句柄返回到
计时器
对象

通过在命令窗口中调用
foo
来尝试此示例。

用于暂停执行,直到计时器停止:

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()
的子函数,但也可以是外部函数,唯一的要求是它将句柄返回到
计时器
对象



尝试在命令窗口中调用
foo

如果func1和func2在两个不同的.m文件上,这是否有效?这是一个忙碌的等待吗?繁忙的等待对我来说是不可接受的…不,它将一直等到计时器停止运行,无论是因为它正在停止运行还是它已经完成了它的执行命令。我尝试了,但它的工作,而while循环是一个繁忙的等待,Matlab使用我的CPU的100%没有任何(和很多时间)。这不是一个好主意:(我加了一个停顿(2)在while和now中,它工作得更好,因为我不需要实时执行。但我认为这是一个解决办法…如果func1和func2在两个不同的.m文件上,这会起作用吗?这是一个忙等待吗?忙等待对我来说是不可接受的…不,它会等到计时器停止运行,无论是因为它正在停止还是因为它已经停止我试过了,但是while循环是一个繁忙的等待过程,Matlab使用了我100%的CPU,但什么都没有用(而且用了很多时间)。这不是一个好主意:(我加了一个暂停(2)在while和now内部,它工作得更好,因为我不需要实时执行。但我认为这是一种变通方法…计时器在调用
@timerCallback
时不会停止,而是在完成调用回调后停止(次数与您定义的次数相同,但默认仅一次).是的,你是对的,计时器在完成调用回调时停止,但我仍然有问题。请提供一个示例,计时器在调用
@timerCallback
时不会停止,但只有在完成调用回调后才会停止(次数由你定义,但默认仅一次)。是的,您是对的,计时器在完成调用回调时停止,但我仍然存在问题。请提供一个解决方案。此解决方案不起作用,因为我的计时器有无限多个任务要执行,并且使用“stop()”停止。我收到此错误:“无法使用具有无限多个任务要执行的计时器等待。”函数th=subfo global 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函数refresherCallback(~,~,~)全局h;counter=get(h,'tasksecuted');如果(计数器>10)停止(h);结束end@Bedo详细阐述你的原始问题,为你试图完成的任务提供更多的背景。否则,就不可能为一般问题提供有效的解决方案。是的,对不起。原始问题包含了所有需要的细节。我刚刚补充了一个事实,即计时器不是单次触发的,而是在con上停止的周期计时器Didition在其TimerFcn中进行了测试。最后,我决定从这个解决方案开始,并添加一个新的单点计时器,该计时器具有非常高的启动延迟,在我的周期计时器停止时停止。它可以工作!谢谢!我要求为您提供更好的方向,这是您希望实现的一般工作流程。我怀疑您正在尝试实现的目标可以用更简单的方法完成。如果遇到整体结构复杂的问题,请随时更新您的问题或询问另一个问题。此解决方案不起作用,因为我的计时器有无限多的任务要执行,并且使用“stop()”将其停止。我遇到以下错误:“无法等待具有无限任务可执行的计时器。”函数th=subfo global 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函数refresherCallback(~,~)全局h;计数器=获取(h,'tasksecuted');如果(计数器>10)停止(h);结束end@Bedo详细阐述你的原始问题,为你试图完成的任务提供更多的背景。否则,就不可能为一般问题提供有效的解决方案。是的,对不起。原始问题包含了所有需要的细节。我刚刚补充了一个事实,即计时器不是单次触发的,而是在con上停止的周期计时器Didition在其TimerFcn中进行了测试。最后,我决定从这个解决方案开始,并添加一个新的单点计时器,该计时器具有非常高的启动延迟,在我的周期计时器停止时停止。它可以工作!谢谢!我要求为您提供更好的方向,这是您希望实现的一般工作流程。我怀疑您正在尝试实现的目标可以用一种更简单的方式完成。如果您遇到整体结构复杂的问题,请随时更新您的问题或询问另一个问题