Wie kann man eine Funktion in einer MATLAB App im Hintergrund ausführen?
- Hintergrund der Notwendigkeit einer Hintergrundausführung
- Verwendung von MATLAB-Built-in Funktionen für paralleles Rechnen
- Implementierung in einer MATLAB App
- Beispiel für die Nutzung von parfeval in einer App
- Alternativen und weitere Tipps
- Fazit
In der MATLAB App-Entwicklung stellt sich häufig die Frage, wie aufwendige oder lang andauernde Berechnungen ausgeführt werden können,
ohne die Benutzeroberfläche zu blockieren. Wenn eine Funktion im Hintergrund läuft, bleibt die App währenddessen reaktionsfähig,
was eine bessere Nutzererfahrung ermöglicht. Im Folgenden wird erläutert, wie dieses Ziel mit MATLAB erreicht werden kann.
Hintergrund der Notwendigkeit einer Hintergrundausführung
MATLAB-Apps basieren auf einer Ereignis-gesteuerten Programmierung. Wird eine rechenintensive Funktion direkt von einem Callback
(z. B. einem Button-Klick) ausgeführt, blockiert der Ausführungsthread oft die Benutzeroberfläche, bis die Berechnung abgeschlossen ist.
Das bedeutet, dass keine weiteren Interaktionen möglich sind und die App als eingefroren wahrgenommen wird.
Daher ist es wichtig, zeitintensive Operationen im Hintergrund oder in einem separaten Thread auszuführen.
Verwendung von MATLAB-Built-in Funktionen für paralleles Rechnen
MATLAB bietet mehrere Werkzeuge, um Funktionen asynchron oder in parallelen Umgebungen auszuführen. Ein besonders geeignetes Konzept
ist die Verwendung von parfeval oder backgroundPool in Kombination mit Callback-Funktionen.
parfeval ermöglicht es, eine Funktion in einem separaten MATLAB-Worker-Thread parallel auszuführen, ohne den Hauptthread zu blockieren.
Seit neueren MATLAB-Versionen gibt es auch den backgroundPool, der automatisch Ressourcen verwaltet.
Damit lässt sich eine Funktion im Hintergrund starten, und sobald die Berechnung abgeschlossen ist, kann ein Callback aufgerufen werden.
Implementierung in einer MATLAB App
In einer MATLAB App kann man eine langwierige Aufgabe so starten, dass sie die Benutzeroberfläche nicht blockiert.
Ein einfaches Beispiel besteht darin, beim Drücken eines Buttons die Funktion mit parfeval auszuführen.
Die App kann mittels eines Zustands-Flags oder durch direkte Registrierung eines Callback-Funktionshandlers erkennen, wann die Berechnung fertig ist.
Währenddessen bleibt die Benutzeroberfläche bedienbar, und der Nutzer kann z. B. weitere Aktionen ausführen oder den Fortschritt beobachten.
Beispiel für die Nutzung von parfeval in einer App
Angenommen, man hat eine Funktion langeBerechnung, die einige Sekunden benötigt.
f = parfeval(backgroundPool, @langeBerechnung, 1, inputArgument);f.Future.then(@(result) app.FunktionFertig(result));Dabei wird die Funktion langeBerechnung im Hintergrund ausgeführt. Sobald sie fertig ist, wird die Methode FunktionFertig der App aufgerufen,
Alternativen und weitere Tipps
Neben parfeval gibt es auch die Möglichkeit, MATLAB-Timer oder batch Jobs zu verwenden, allerdings sind diese weniger interaktiv
oder komplexer zu handhaben. Bei einfachen Hintergrundaufgaben in Apps empfiehlt sich eher parfeval mit dem backgroundPool.
Außerdem sollte man immer darauf achten, dass die User-Interface-Komponenten nur aus dem Hauptthread aktualisiert werden,
Fazit
Das Ausführen einer Funktion im Hintergrund innerhalb einer MATLAB App erhöht die Reaktionsfähigkeit der Benutzeroberfläche erheblich.
Durch die Nutzung von parfeval oder backgroundPool können rechenintensive Prozesse asynchron im Hintergrund laufen,
wodurch die Nutzererfahrung verbessert und Einfrieren der App vermieden wird. Die direkte Integration solcher Hintergrundprozesse in den Apps sorgt für ein flüssiges und modernes Bedienkonzept.
