我每两秒钟检查一次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
1条答案
按热度按时间k3bvogb11#
您在一个不“知道”
t
是什么的函数中调用stop(t)
-它在该函数的作用域中没有定义,因此您会得到错误消息无法识别的函数或变量“t”。
回调函数
check_exe
的第一个输入,实际上是一个timer对象,但你现在没有使用它,而是使用了mTimer
。你需要使用stop(mTimer)
,或者将输入名称改为t
。下面是一个简单的完整示例,它只检查某个测试文件是否存在:这将生成以下输出,其中我在6秒后手动生成了
test.txt
文件。