如何在MATLAB中使函数无阻塞?

时间:2017-03-14 07:15:10

标签: multithreading matlab nonblocking

是否有任何方法可以在MATLAB中使函数无阻塞?

例如程序

for t = 0 : 1 : 1000
    if mod(t, 100) == 0
        foo();
    end
end

它每100个周期调用foo()foo()花费大约50个周期。

我想在后台任务中调用foo()并在完成后调用某个回调函数。有什么方法可以在MATLAB中实现它吗?

1 个答案:

答案 0 :(得分:1)

在matlab中做多线程你应该使用“批处理”命令(我认为你必须有并行计算工具箱),

这是一个例子:

我喜欢在matlab中运行一个需要很长时间的脚本

示例脚本:

for i=1:1e8
   A(i)=sin(i*2*pi/1e8);
end

我将此脚本保存为“da”!

然后以批处理模式运行它我在matlab中编写了这段代码:

 job=batch("da")

作业以批处理模式运行,您可以同时使用matlab 在完成你可以写的工作后检索结果:

 load(job,'A')

,生成的数组A将位于您的工作区

你可以从Home>打开“monitor job gui”环境>并行>监视工作 最后你可以用以下简单的代码删除作业:

 delete(job)

要加载批处理函数,您只需使用以下语句:

 j=batch(fcn, N, {x1,x2,...,xn})

其中fcn是你的函数名,N是输出数组的数量,x1,... xn是函数输入数组。