Leider gibt es keine Möglichkeit, die Ereignis-/Rückruf-Warteschlange zu leeren, ohne die Grafiken zu rendern, nur umgekehrt. Es gibt auch keine Möglichkeit, die Ereignis-/Rückrufwarteschlange für ein bestimmtes Grafikobjekt zu leeren, das für die Aktualisierung der Value
-Eigenschaft der uicontrol
erforderlich ist.
Was können Sie zwar tun, ist eher als die Vanille drawnow
verwenden, sollten Sie die limitrate
Eingang drawnow
verwendet, die dafür sorgt, dass, wenn Sie Ihre Plots bei einer sehr hohen Frequenz aktualisieren, sind sie eigentlich nur bei maximal 20 gemacht Bilder pro Sekunde. Dies verhindert, dass Sie aufgrund der Renderereignisse eine signifikante Verzögerung haben.
drawnow limitrate
Aus der Dokumentation:
drawnow limitrate
begrenzt die Anzahl der Updates zu 20 Bildern pro Sekunde. Wenn seit der letzten Aktualisierung weniger als 50 Millisekunden vergangen sind oder wenn der Grafikrenderer mit der vorherigen Änderung beschäftigt ist, verwirft bownow die neuen Aktualisierungen. Verwenden Sie diesen Befehl, wenn Sie Grafikobjekte in einer Schleife aktualisieren und nicht jedes Update auf dem Bildschirm anzeigen müssen. Das Überspringen von Updates kann schnellere Animationen erzeugen. Ausstehende Rückrufe werden verarbeitet, sodass Sie während Animationen mit Figuren interagieren können.
Und als Beispiel:
hcheck = uicontrol('style', 'check', 'String', 'Green');
hplot = plot(rand(10,1));
set(gca, 'ylim', [0 1], 'xlim', [1 10])
originalColor = get(hplot, 'Color');
while true
set(hplot, 'YData', rand(10,1))
if get(hcheck, 'value')
set(hplot, 'Color', 'g')
else
set(hplot, 'Color', originalColor)
end
drawnow limitrate
end

Ausführen dieses Beispiel auf meinem Mac, ohne die limitrate
Option, ich war pro Sekunde Schleife durch die while
Schleife etwa 42 mal der Lage . Mit der aktivierten Option limitrate
konnte ich 767 Mal pro Sekunde durchlaufen.
Es sollte nicht nötig sein, 'drawnow' zu verwenden. Sie müssen viel mehr Informationen geben, damit Ihnen jemand helfen kann - idealerweise ein Arbeitscode, der den Engpass zeigt, den Sie haben. –
@ nirvana-msu 'drawnow' ist hier notwendig, um die Callback-Queue zu löschen. – Suever
@Sie sollte es nicht beeinflussen _querying_ uicontrol checkbox status. True, der Callback wurde vielleicht nicht verarbeitet, aber OP scheint kein Problem mit –