Am Sa, 28. Mai 2022 07:33:57 +0200, schrieb Thomas Schwarzer:
> Da ich im Netz nichts gefunden habe: Kannst Du noch ein/zwei Sätze zur
> genauen Wirkweise von ADoLater sagen (oder mir einen Link nennen)?
Eine einfache Frage ohne einfache Antwort. ADoLater wurde mit der Beta 37
eingeführt und ist "undokumentiert". Es gab damals einige Informationen
im Bug-Tracker für 40tude Dialog (eine Mantis-Instanz). Der ist aber seit
über 15 Jahren nicht mehr zugänglich und nirgends archiviert. (Marcus hat
die Inhalte vermutlich noch. - Aber das hilft nicht wirklich weiter...)
Sowohl ADo als auch ADoLater rufen Befehle jeweils als eigenen Thread auf.
Das funktioniert, als hätte man den betreffenden Befehl direkt im Menü aus
der GUI gestartet. Während der Befehl durch den Thread ausgeführt wird,
könnte man theoretisch normal weiterarbeiten. (Ausnahme: Befehle, die ein
eigenes Unterfenster öffnen. Hier wird auch bei ADo in Skripten gewartet,
bis das Unterfenster wieder geschlossen ist.)
Durch die potenzielle Parallelbearbeitung entstehen u. U. Konflikte oder
fehlerhafte/unerwünschte Ergebnisse.
Bei Skripten ist diese Gefahr besonders groß, da das Starten des Threads
für den Nachfolgebefehl regelmäßig schneller geht, als die Abarbeitung
des Threads vom Vorbefehl, wenn dieser z. B. auf die Artikeldatenbank
zugreifen muss.
Erschwerend kommt hinzu, dass einzelne Befehle während ihrer Abarbeitung
zeitweise den Fokus vom Hauptfenster lösen. Nachfolgend gestartete Befehle
sind dann u. U. ins Nirwana gerichtet.
ADoLater verschiebt den Start von Befehlen in einen eigenen Wrapper-Thread,
der unabhängig vom Haupt-Thread der Skriptabarbeitung ausgeführt wird. Er
startet (/ohne/ feste Zeitvorgabe) leicht verzögert und damit üblicherweise
erst nach dem Ende des Haupt-Threads. (Jedoch nicht zwingend.)
Ziel war v. a., Befehle aus Skripten aufrufen zu können, die bei linearer
Abarbeitung zu Problemen führen. So können z. B. /nach/ dem Aufruf eines
ADoLater, welches ein eigenes Unterfenster öffnet, mittels PostKey im
Haupt-Thread Tastendrücke im Tastaturpuffer abgelegt werden, welche sich
auf das - per separatem Thread gestartete - Unterfenster auswirken.
Da weder ADo noch ADoLater zwingend zu einer sequenziellen Abarbeitung der
Skriptbefehle führen und viele Randbedingungen (z. B. der aktuelle Fokus)
Einfluss auf das Ergebnis haben, hilft oft nur Experimentieren.
Schönen Gruß
Bernd