multiple cprintf in parallel loop problem

1 vue (au cours des 30 derniers jours)
Yu Li
Yu Li le 18 Sep 2018
Commenté : Yu Li le 20 Sep 2018
I want to print a secetence with different color in the command windows using 'cprintf':
https://www.mathworks.com/matlabcentral/fileexchange/24093-cprintf-display-formatted-colored-text-in-the-command-window
below are the test code:
q = parallel.pool.DataQueue;
afterEach(q, @(args) cprintf(args{:}));
parfor i=1:1:100
tic
pause(0.5)
time1=toc;
fprintf(', Reading time:'); send(q,{'Keywords','%4.1f',time1}); fprintf(' seconds,')
end
the code runs OK using regular for-loop, but once I changed it into parfor, the printed result are chaos, this may be caused by the combination of fprintf-cprintf-fprintf.
is there anyway to solve this problem?
Thanks!
Yu

Réponse acceptée

Edric Ellis
Edric Ellis le 19 Sep 2018
To stop the output being interleaved, you need to send all the stuff to be printed as a single message. Here's one way:
q = parallel.pool.DataQueue;
afterEach(q, @multiCprintf);
parfor i=1:1:100
tic
pause(0.5)
time1=toc;
% Send multiple sets of things to print in a cell-of-cells
send(q, {...
{'Reading time: '}, ...
{'Keywords', '%4.1f', time1}, ...
{' seconds\n'}});
end
function multiCprintf(argsCell)
% loop over the outer layer of cells, and call cprintf on
% the inner layers.
for idx = 1:numel(argsCell)
theseArgs = argsCell{idx};
cprintf(theseArgs{:});
end
end
  4 commentaires
Edric Ellis
Edric Ellis le 20 Sep 2018
I think this is because cprintf has 2 different syntaxes:
1. cprintf(style, format, ...)
2. cprintf(literalText)
In particular, there's no cprintf(format, ...).
So, when you do
cprintf(' %s\n', 'Second')
cprintf is actually throwing an error because ' %s\n' isn't a valid style. You can fix this by using
{'Text', ' %s\n', unit}
which tells cprintf to print in the plain style.
Yu Li
Yu Li le 20 Sep 2018
Thank you!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with MuPAD dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by