所以基本上我想做的是让我的主程序进行一些计算,与并行程序无关。并行程序不断检查某些事件是否成功,当它发生时,我希望主程序冻结并启动另一个并行作业。有可能在Matlab中这样做吗?
您可以将其想象为机器人骑行(主程序),同时检查其传感器数据(工作人员)。当它接近障碍物时,启动避开障碍物的程序。
提前谢谢,
Rugile:)
答案 0 :(得分: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不是多线程的,因此执行定时器回调函数会中断并阻止任何主函数的执行。定时器也可以通过一系列复杂的规则相互中断,有时但并非总是如此,我曾试图对其进行逆向工程,但后来放弃了。但是,对于你提出的相对简单的问题,我认为计时器对象就足够了。