Как получить вывод дескриптора функции после вызова afterEach в Matlab? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь обновить значение переменной после получения данных, чтобы я мог обновить сообщение на панели ожидания о том, сколько заданий он выполнил.Мой код выглядит примерно так:

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 голосов
/ 30 ноября 2018

Это должно сработать.Убедитесь, что вы переместили функцию completeJobs в ее собственный сценарий, в противном случае функция clear в строке 1 не будет работать.

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);

Поскольку функция завершено, вызывается дважды для каждого прослушиваемого события, в котором требуется переключение.функция, гарантирующая, что n увеличивается только один раз.Это делается путем передачи фиктивного ввода в completeJobs

function j = completedJobs(varargin)
    persistent n
    if isempty(n)
        n = 0;
    end
    if numel(varargin) ~=0
    else
    n = n+1;
    end
    j=n;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...