【问题标题】:How to stop a matlab code running after certain amount of time?如何在一定时间后停止运行 matlab 代码?
【发布时间】:2015-04-16 16:17:45
【问题描述】:

假设我正在运行一个函数fun(),但我无法访问其中的内容(因此我无法在其中添加条件)。 对于某些输入,该功能可能很慢。如果程序花费超过一定时间,我该如何终止程序?

更新:我正在测试各种输入的功能。对于他们中的一些人来说,这需要更多。我想跳过那些耗时过长的,然后转到下一个输入。

【问题讨论】:

  • 停止该功能后,您的理想结果是什么?你希望它返回一些东西(比如,某种不精确的解决方案)还是你想杀死整个工作?
  • 如果时间过长,直接跳到下一个输入。基本上我正在测试各种输入的功能。对于他们中的一些人来说,这需要更多。我想跳过那些耗时太长的。
  • 如果你不能在内部访问这个函数,那就麻烦了。你知道是什么让函数运行时间更长吗? (例如,在给定输入大小/值的情况下,您能否提前明智地估计一下)

标签: matlab


【解决方案1】:

不幸的是,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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多