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

问题描述 投票:1回答:1

我尝试在收到数据后更新变量的值,这样我就可以在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的两次调用合并为只能执行这两次调用的那种吗?提前致谢!

matlab
1个回答
0
投票

这应该可以解决问题。确保将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
© www.soinside.com 2019 - 2024. All rights reserved.