0

所以基本上我想做的是让我的主程序做一些计算,与并行程序无关。并行程序不断检查某个事件是否实现,当它实现时,我希望主程序冻结并开始另一个并行作业。在matlab中可以这样做吗?

你可以把它想象成一个骑着机器人(主程序),同时检查它的传感器数据(工人)。当它接近障碍物时,会启动一个避开障碍物的程序。

在此先感谢,
Rugile :)

4

1 回答 1

2

我见过的最好的解决方案是使用 Matlab 计时器对象。

实现代码如下所示:

%Setup timer
t = timer;
t.ExecutionMode = 'fixedSpacing';  %See `docsearch Timer Object Execution Modes` for explaination
t.Period = 1;  %Number of seconds after one execution to the start of the next
t.TimerFcn = @checkAndExecuteParallelJob
start(t);

%Start main job
mainJob();

在另一个文件中

function checkAndExecuteParallelJob
if (conditionIsFalse)
    %Fast return
    return;
end
%..Code to execute parallel job.  This will block the main execution

Matlab 不是多线程的,所以定时器回调函数的执行会中断并阻塞任何主函数的执行。定时器也可以互相打断,有时但并非总是如此,我曾经试图逆向工程但后来放弃了一组复杂的规则。但是,对于您提出的相对简单的问题,我认为一个计时器对象就足够了。

于 2013-08-22T16:28:11.967 回答