如何在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后得到函数句柄的输出?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Quick 的单元测试中多次调用 before- 和 afterEach 块?