停止执行回调函数- MATLAB

qvsjd97n  于 2022-11-24  发布在  Matlab
关注(0)|答案(1)|浏览(433)

我每两秒钟检查一次EXE是否正在运行。如果它没有运行,那么在一个.mat文件中检查一个值。如果值是1,那么程序应该停止(t)。在停止(t)的时刻不工作,或者如果我离开它,那么我有无限循环。

t=timer;
t.period=2;
t.TasksToExecute=inf;
t.ExecutionMode='fixedRate';
t.TimerFcn=@check_exe;
start(t)

function check_exe(mTimer,~)

%check if EXE is already running
[~,b]=system('tasklist');
IsRunning=contains(b,'Digitale_Ablegeschablone');
    
    if IsRunning(1)
        fprintf('Digitale_Ablegeschablone ist bereits geöffnet!\n');
    else
        load('Parameter.mat', 'Speicherstatus')
        load('Parameter.mat', 'Block_beendet')
        load('Parameter.mat', 'Save_Session')
        
        if Save_Session==1
            fprintf('Sitzung ist gespeichert. Digitale Ablegeschablone wird nicht geöffnet\n');
            stop(t) %stop
        elseif Block_beendet==1
            fprintf('Sitzung ist beendet. Digitale Ablegeschablone wird nicht geöffnet\n');
            stop(t) %stop 
        else
            %start again (if its crashed)
            system('C:\Users\christian\Desktop\TEST\EXE\Digitale_Ablegeschablone.exe &')
        end
    end
end
k3bvogb1

k3bvogb11#

您在一个不“知道”t是什么的函数中调用stop(t)-它在该函数的作用域中没有定义,因此您会得到错误消息
无法识别的函数或变量“t”。
回调函数check_exe的第一个输入,实际上是一个timer对象,但你现在没有使用它,而是使用了mTimer。你需要使用stop(mTimer),或者将输入名称改为t。下面是一个简单的完整示例,它只检查某个测试文件是否存在:

function check(t,~)
    if exist( 'C:\Users\wfeavyou\Desktop\test.txt', 'file' )
        fprintf( 'Stopping at time=%dsec!\n', (t.TasksExecuted-1)*t.Period );
        stop(t) %stop 
    else
        fprintf( 'Check failed, continuing at time=%dsec!\n', (t.TasksExecuted-1)*t.Period );
    end
end

这将生成以下输出,其中我在6秒后手动生成了test.txt文件。

Check failed, continuing at time=0sec!
Check failed, continuing at time=2sec!
Check failed, continuing at time=4sec!
Check failed, continuing at time=6sec!
Stopping at time=8sec!

相关问题