如何在一定时间后停止运行matlab代码?

Dan*_*iel 2 matlab

假设我正在运行一个 function fun(),但我无权访问它的内部(所以我不能在其中添加条件)。对于某些输入,该函数可能会很慢。如果程序运行时间超过一定时间,我该如何终止程序?

更新:我正在测试各种输入集的功能。对于其中一些人来说,这需要更多。我想跳过那些花费太长时间的内容,然后转到下一个输入。

sil*_*fer 5

不幸的是,MATLAB 的单线程特性使这变得比应有的更加复杂。我的第一个想法是使用计时器,但即使计时器回调也不会中断繁忙的 MATLAB,因为所有 M 代码都是从同一线程执行的。

我将通过从另一个 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)
Run Code Online (Sandbox Code Playgroud)