在Matlab中调用afterEach之后如何获取函数句柄的输出?

时间:2018-11-29 10:37:04

标签: matlab

一旦变量接收到数据,我便尝试更新它的值,这样我就可以更新等待栏中的消息以了解已完成多少工作。我的代码如下所示:

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的调用合并为一个可以执行这两个调用所执行的操作? 预先感谢!

1 个答案:

答案 0 :(得分: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