OBS/Adminhilfe/Threading

Aus OBS Wiki
Version vom 23. April 2020, 07:20 Uhr von Rademacker (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{ZugriffOBS}} =Threading= ==Datenstruktur-Auswahl== Wann ist welche Datenstrutkur zu wählen, welche Unterschiede gibt es. '''TxThread''': Ein dauerhaft lauf…“)
Zur Navigation springen Zur Suche springen
Für diese Seite wurde eine Zugriffsbeschränkung eingerichtet. Falls du diese Nachricht siehst, bist du nicht berechtigt, diese Seite einzusehen.

Dies ist eine zugriffsgeschützte Seite.


Admin-Hilfe

OBS-Administration / Installation
kundenspezifische Anpassungen
OBS Protokolle
Shop-Administration

Threading

Datenstruktur-Auswahl

Wann ist welche Datenstrutkur zu wählen, welche Unterschiede gibt es.

TxThread: Ein dauerhaft laufender nebenläufiger Prozess mit kurzer Interval-Zeit. Beispiel: Thread-Widget, dass alle 2s die nebenläufigen Prozesse auflistet.

TxTask: Der Prozess wird einmalig ausgeführt oder hat eine hohe Interval-Zeit. Beispiel: Angedocktes Widget, dass beim Wechsel des Datensatzes EINMALIG Daten erhebt und anzeigt. Beispiel: ToDo-Widget, dass sich nur selten aktualisiert (30s).

CallAsync: Einmalige Ausführung, Fire-and-Forget. Achtung: Parallele Ausführung möglich. Beispiel: Das wöchentlich laufende Optimize-Tables innerhalb der Garbage.

TxThread

  • läuft nach der Ausführung (.Start) dauerhaft
  • Events für Initialisierung (OnInit), Nebenläufigkeit (OnLoop) und Synchronisation (OnSync)
  • Sync wird nur ausgeführt wenn im Loop "CallSync" aufgerufen wird
  • Sync wird NACH Loop ausgeführt, NIEMALS parallel, Datenstrukturen können also übergreifend genutzt werden
  • Loop wird alle "Interval"-ms ausgeführt
  • Loop kann von außen manuell früher aufgerufen werden (.Execute)

TxTask

  • läuft einmalig nach der ausführung (.Execute)
  • Abbruch möglich (.Stop), Abbruch kann auf das Ende des Prozesses warten (.Stop(true))
  • Nebenläufigkeit und Synchronisation laufen NIEMALS parallel
  • Mehrfachaufruf ist möglich, ein erneuter Aufruf beenedet aber zuvor den Vorherigen, somit ist die parallele Ausführung der Nebenläufigkeit ausgeschlossen
  • regelmässige ausführung über .Schedule(Interval) möglich (über internen Task-Manager)
  • Beenden mit MyFreeAndNil wartet auf das Ende

CallAsync

  • Aufruf über den ThreadPool: GL_oThreadPool.CallAsync(...)
  • keine Datenstruktur nötig
  • Ausführung kann nicht abgebrochen werden (außer durch Programm-Ende)
  • parallele Ausführung ist möglich, am besten auf externen Datenstrukturen verzichten