Matlab - 等待回调函数的结束

时间:2017-08-08 14:24:35

标签: matlab semaphore

我有一个使用两个计时器的程序。第一个允许我每秒与微控制器通信并更新图表,如果用户之前没有按下停止按钮,我会在50秒后使用第二个停止程序。问题是我不知道在结束程序之前如何等待第一个计时器的回调函数的执行结束。有时,它会在第一次回调中停止。我想避免这种情况,但我不知道如何。我试图使用“waitfor”,但它不起作用。 这是一个具有相同问题的简单示例。

t = timer('ExecutionMode','fixedRate','Period', 1,'TimerFcn',@testWait); 
fwait = figure('Visible','off'); 
start(t); 
disp('start'); 
pause(5); 
delete(fwait); 
i=0; 
while true
    waitfor(fwait);
    disp(int2str(i)); 
    pause(0.05);
    i = i + 1;
end

function testWait(src,event)
    disp('before');
    waitfor(evalin('base','fwait')); 
    disp('after');
    assignin('base','fwait',figure('Visible','off')); 
    pause(1); 
    delete(evalin('base','fwait')); 
end

请有人帮帮我! :)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用 uiwait uiresume 。这是如何使用它的代码片段:

f = figure;
h = uicontrol('Position',[20 20 200 40],'String','Continue',...
              'Callback','uiresume(gcbf)');
disp('This will print immediately');
uiwait(gcf); 
disp('This will print after you click Continue');
close(f);