MATLAB: Alternative to “drawnow” to plot real time data inside while loop

3d plotsadcdrawnow

I'm reading data from ADC in real time (while loop) and I'm trying to plot in real time. Now, I can't use
pause on; hold on; etc
Because it interferes with ADC's API and how it samples the data. My code looks something like that and it does plot in real time.
while true %sampling from ADC

%read data from ADC and update

a = datafromADC;
plot3(t, real(datafromADC), imag(datafromADC))
drawnow;
end
It works but I notice that when I increase sampling rate above certain value, ADC's API crashes, giving me an error pointing to .NET library that stopped working. When I increase sampling rate but comment plot3 and drawnow,
while true %sampling from ADC
%read data from ADC and update
a = datafromADC;
%plot3(t, real(datafromADC), imag(datafromADC))
%drawnow;
end
This code works and I can plot it later but without ability to plot in real time. My theory is that ADC's API and "drawnow" compete for resources and cause API to crash.
Are there alternatives to "drawnow" to plot complex data in real time? Right now my only option is to sample data and store it, terminate "while" loop and run a different script to display it.

Best Answer

"Are there alternatives to "drawnow" to plot complex data in real time?"
I can think of two things to try.
1) instead of calling plot3() and dealing with all of its overhead on each iteration, just plot it once and update the X/Y/ZData properties.
2) instead of executing drawnow on each iteration, use a timer to update the plot every so often.
Here are those suggestions quasi -implemented; you can fit it to your needs.
% set up drawnow timer
t = timer;
t.StartDelay = 1;
t.TimerFcn = @(~,~)drawnow;
t.Period = 1; %update every 1 sec.
h = plot3(nan,nan,nan); % Plot empty 3D line
start(t) % start drawnow timer
while true %sampling from ADC
%read data from ADC and update
a = datafromADC;
h.XData(end+1) = t; % ?
h.YData(end+1) = real(datafromADC);
h.ZData(end+1) = imag(datafromADC);
end
stop(t) %stop timer
*Not tested
[addendum]
3) before plotting this figure, clear all other figures. Every time drawnow() is executed it will update all graphics which could easily cause a bottleneck.