假设我正在运行一个函数fun()
,但我无法访问其中(因此我无法在其中放置条件)。
对于某些输入,该功能可能很慢。如果程序花费的时间超过一定时间,我该如何终止程序?
更新:我正在测试各种输入的功能。对于其中一些,它需要更多。我想跳过花费太长时间的内容,然后转到下一个输入。
答案 0 :(得分:4)
不幸的是,MATLAB的单线程特性使它变得比它应该更复杂。我的第一个问题是使用定时器,但即使是定时器回调也不会中断繁忙的MATLAB,因为所有的M-Code都是从同一个线程执行的。
我会通过从另一个MATLAB进程调用该函数并监视该进程来解决这个问题。您可以使用内置的SYSTEM函数调用MATLAB,并使用-r命令行参数指定要运行的脚本的名称。伪代码看起来像这样。这个粗糙且未经测试但应该给你的想法:
% Create Timer object
timerObj = timer();
% set timer properties, with 60 second interval
set(timerObj, 'executionMode', 'singleShot', 'StartDelay', 60, 'timerFcn', @timerCallback);
% call MATLAB. It will run in background
system( 'matlab.exe -r myscript &' );
function timerCallback(varargin)
% if the other matlab process is still running when the timer is elapsed, kill it. perhaps use another system() call to run taskkkill.exe (if on windows)