MATLAB Answers

0

Update app.textarea inside a parfor loop

Asked by Nick LaSorte on 7 Mar 2018
Latest activity Answered by Ashadullah Shawon on 19 Jul 2019
I'm trying to update app.TextArea in the app designer using parfor_progress
Error: Valid indices for 'app' are restricted in PARFOR loops.
How would I fix the sliced variable that is 'app' or is it just impossible with parfor and the app designer?
Using Matlab 2017b
Example code below:
clear;
clc;
num_iter=100;
percent=parfor_progress(num_iter);
parfor i=1:num_iter
pause(randi(10));
percent=parfor_progress;
app.TextArea.Value={percent};
end
parfor_progress(0);
Any help/links for further reading would be helpful.
Thanks
Nick

  0 Comments

Sign in to comment.

2 Answers

Answer by Walter Roberson
on 7 Mar 2018
 Accepted Answer

If you are using a newer release then I would skip all of that and use parallel.pool.DataQueue and send() and afterEach(); see https://www.mathworks.com/help/distcomp/send.html .

  1 Comment

Thanks Nick

Sign in to comment.


Answer by Ashadullah Shawon on 19 Jul 2019

i am just expanding the accepted answer for the quick understanding. I have uploaded the full appdesigner code and here is also the functions preview using parallel.pool.DataQueue and send() and afterEach()
methods (Access = private)
function app= func1(app,data)
%disp(data);
app.textTextArea.Value = strcat('Function 1----',datestr(now));
%pause(1);
app.textTextArea.Value = [app.textTextArea.Value;strcat('Function 1----',datestr(now))];
end
function app= func2(app,data)
%disp('Function 2');
app.textTextArea.Value = [app.textTextArea.Value;strcat('Function 2----',datestr(now))];
%pause(1);
app.textTextArea.Value = [app.textTextArea.Value;strcat('Function 2----',datestr(now))];
end
end
methods (Access = private)
% Value changed function: ClickOnButton
function ClickOnButtonValueChanged(app, event)
q = parallel.pool.DataQueue;
r = parallel.pool.DataQueue;
afterEach(q, @app.func1);
afterEach(r, @app.func2);
parfor i = 1:2
if i == 1
%func1(app);
send(q,i);
else
%func2(app);
send(r,i);
end
end
end
end

  0 Comments

Sign in to comment.