如何在Matlab中调用afterEach后得到函数句柄的输出?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Matlab中调用afterEach后得到函数句柄的输出?相关的知识,希望对你有一定的参考价值。

我尝试在收到数据后更新变量的值,这样我就可以在waitbar上更新已完成的工作数量。我的代码看起来像这样:

function value = completedJobs(value)
value=value+1;
end

job=0;
dq = parallel.pool.DataQueue;
wb = waitbar(0,'Processing');
afterEach(dq, @(varargin) completedJobs(job)) // this is where I would like to update the waitbar with new completed jobs on the message
afterEach(dq, @(varargin) waitbar(job,sprintf('Completed: %d', job));
parfor i=1:100
    send(dq, i);
end

并且有可能将afterEach的两次调用合并为只能执行这两次调用的那种吗?提前致谢!

答案

这应该可以解决问题。确保将completedJobs函数移动到它自己的脚本,否则第1行的clear函数将不起作用。

clear completedJobs
dq = parallel.pool.DataQueue;
wb = waitbar(0,'Processing');
Listener = afterEach(dq, @(varargin) waitbar((completedJobs/100),wb,sprintf('Completed: %d', completedJobs(1))));
parfor i=1:100
    send(dq, i);
end
delete(wb);

因为每个侦听事件都会调用completedJobs函数两次,所以需要在函数内进行切换以确保n仅递增一次。这是通过将虚拟输入传递给completedJobs来完成的

function j = completedJobs(varargin)
    persistent n
    if isempty(n)
        n = 0;
    end
    if numel(varargin) ~=0
    else
    n = n+1;
    end
    j=n;
end

以上是关于如何在Matlab中调用afterEach后得到函数句柄的输出?的主要内容,如果未能解决你的问题,请参考以下文章

在matlab中怎么直接调用函数

为啥在 Quick 的单元测试中多次调用 before- 和 afterEach 块?

如何在matlab中得到一个小数小数点后每一位上的数?输出为一个数组。

matlab 如何保留变量值

在matlab中如何根据拟合图得到函数?

[python][matlab]使用python调用matlab程序