OBS/Adminhilfe/Threading: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
{{ZugriffOBS}} | {{ZugriffOBS}} | ||
=Datenstruktur-Auswahl= | |||
Wann ist welche Datenstrutkur zu wählen, welche Unterschiede gibt es. | Wann ist welche Datenstrutkur zu wählen, welche Unterschiede gibt es. | ||
| Zeile 37: | Zeile 36: | ||
* Ausführung kann nicht abgebrochen werden (außer durch Programm-Ende) | * Ausführung kann nicht abgebrochen werden (außer durch Programm-Ende) | ||
* parallele Ausführung ist möglich, am besten auf externen Datenstrukturen verzichten | * parallele Ausführung ist möglich, am besten auf externen Datenstrukturen verzichten | ||
=Thread-Abbruch= | |||
Ein Thread kann von außen nicht beendet werden! Threads die länger als ein paar Sekunden dauern '''sollten immer''' eine Abbruchbedingung implementieren. | |||
Beispiel: | |||
Eine Liste führt ein TxTask aus der eine Schleife durchläuft. Die Liste wird geschlossen. In der Close-Methode wird der Task freigegeben '''MyFreeAndNil(oTask)'''. Innerhalb des Task sollte die Schleife wie folgt aussehen: | |||
[...] | |||
for i := 1 to nCount do begin | |||
[Schleifen-Logik] | |||
'''if (GL_oThreadPool.TaskCanceled()) then begin''' | |||
'''break;''' | |||
'''end;''' | |||
end; | |||
[...] | |||
Aktuelle Version vom 12. Oktober 2020, 05:40 Uhr
Dies ist eine zugriffsgeschützte Seite.
- System Überwachung
- DEP deaktivieren
- Darstellung unter Windows 7
- Einwahl auf Windows 2000 Server
- Preislisten
- Datenbank Sicherung
- Customize
- Zentrale
- Support Macro
- Service Debug
- Historienprotokoll (Datenänderung OBS)
- Fernwartungsprobleme
- Startparameter
- Fehler beim Kassenabschluss
- Diverse Informationen
- A ras.pbk
- B Command Line Interpreter
- C File Zilla Benutzer XML erzeugen
- D1 OBS_UPDATE.EXE zum OBS Update Server hochladen
- D2 SUPPORT_MACRO zum OBS Update Server hochladen
- H1 Remote Service Protokoll-Übersicht (Alles)
- H Remote ServiceProtokoll-Übersicht
- I Remote Service Commands
- I1 (Admin) Globaler Hinweis für Updates
- J Liste der OBS Updates
- K Angemeldete Service Firmen
- L Systeminformationen einlesen
- M Kundendaten anzeigen
- M1 Kundendatenbankinformationen anzeigen
- N Kundendaten einlesen
- O Kunden-Update Informationen anzeigen
- P Modul Registrierung OBS
- Q App Verwaltung
- S1 Firmen Statistik Protokolle OBS
- S2 Statistik Notfallkassen
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).
TxTask (Scheduled): Ein Task kann über den OBS-internen Taskmanager auch regelmäßig ausgeführt werden (Start mit "Schedule(ms)", Ende mit "Remove"). Bitte Beachten: Wird der Task über den Scheduler erneut ausgeführt bevor die vorherige Instanz das Ende erreicht hat wird der laufende Task abgebrochen und neu gestartet! Dann bitte einen höheren Interval wählen oder auf einen TxThread umbauen.
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
Thread-Abbruch
Ein Thread kann von außen nicht beendet werden! Threads die länger als ein paar Sekunden dauern sollten immer eine Abbruchbedingung implementieren.
Beispiel: Eine Liste führt ein TxTask aus der eine Schleife durchläuft. Die Liste wird geschlossen. In der Close-Methode wird der Task freigegeben MyFreeAndNil(oTask). Innerhalb des Task sollte die Schleife wie folgt aussehen:
[...]
for i := 1 to nCount do begin
[Schleifen-Logik]
if (GL_oThreadPool.TaskCanceled()) then begin
break;
end;
end;
[...]