![]() |
Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Hallo,
ich habe einen Dienst/Service erstellt eine Importroutine ausführt. In einem definierten Intervall z.B. alle 5 Sekunden wird diese Importroutine ausgelöst. Nun ergeben sich für mich folgende Fragen: a) Was mache ich nun, wenn die Ausführung der Importroutine manchmal länger als 5 Sekunden benötigt? Wie kann ich den Thread während der Ausführung z.B. anhalten/pausieren lassen und ihn anschließend wieder sauber starten? Hintergrund ist, dass die Importroutine zur gleichen Zeit nur 1x ausgeführt werden darf. Ich möchte jedoch auch keine Zeit verschwenden und sofort nach der Ausführung der Importroutine mit dem nächsten Job beginnen. b) Mit 'sleep()' kann ich ja eine Zeit angeben, in der kein erneuter Aufruf erfolgt. Was kann man tun, wenn die Ausführungszeit der Importroutine stark variiert? b) Kann innerhalb der Importroutine des Threads ein 'exit' verwendet werden, um bei einem Fehler die Routine sauber zu verlassen oder gibt es dafür einen besseren Weg? Der Thread soll ja nach einem Fehler sauber weiterlaufen. Über ein paar Tipps würde ich mich sehr freuen! lowmax |
Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Hallo,
sowas müsstest Du doch per Timer machen können. Du baust ein Timerereignis, dass Deine Importroutine enthält und startest beim Servicestart den Timer. Im Timerereignis schaltest Du als erstes den Timer aus, dann machst Du den Import und schaltest anschließen im Timerereignis den Timer wieder ein. |
Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Eigentlich gibst du dir die Antwort schon selbst :-) Führe die Importroutine erst erneut aus wenn die vorherige beendet ist. Wenn du den Quelltext zum starten der Importroutine geschrieben hast weißt du ja auch wie du prüfen kannst ob diese läuft. Und wenn du es noch nicht prüfen kannst, kannst du es zumindest selbst einbauen das du irgendwo einen Status hast den du auch abfragen kannst.
|
Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Hallo,
ich vermute, dass es an der Importroutine liegt. Wenn alles korrekt läuft wird als Status ein True zurückgegeben. Geht es schief, wird ein False zurückgegeben. Der Prozess wird dann aber mit einem 'Exit' in der Importroutine beendet. Irgendwie scheint der Prozessablauf durch das 'Exit' gestört. Kann man ein 'Exit' denn in einem Dienst/Service ohne weiteres verwenden oder gibt es elegantere Möglichkeiten? lowmax |
Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Also mir hat man beigebracht, dass "exit" böse ist ;). Kannst du das Exit nicht mit anderen Konstrukten ersetzen?
Zum Thema Ablauf: Zitat:
Allgemein: Ich könnte mir vorstellen bei diesem Problem mit Threads zu arbeiten: Hauptthread startet ImportThread und wartet, bis dieser fertig ist. Dann wird ggf. ein neuer Import gestartet usw... |
Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Das 'exit' hinter einem False bei einem Fehler wird gesetzt, damit die Importroutine wirklich nicht weitermacht, wenn ein Fehler aufgetreten ist.
Ansonsten müsste ja das die gesamte Routine umgestellt werden. Errorflag=Prüfroutine1(); if Errorflag=True then Prüfroutine2(); if Errorflag=True then Prüfroutine3(); if Errorflag=True then Prüfroutine4(); .... lowmax |
Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Hat sich erledigt...
... ein Rückgabewert einer Funktion war nicht definiert! :wall: lowmax |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz