AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Allgemeine Fragen zu Diensten/Services - Flusskontrolle
Thema durchsuchen
Ansicht
Themen-Optionen

Allgemeine Fragen zu Diensten/Services - Flusskontrolle

Ein Thema von lowmax_5 · begonnen am 16. Jan 2009 · letzter Beitrag vom 21. Jan 2009
Antwort Antwort
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#1

Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 16. Jan 2009, 13:16
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 16. Jan 2009, 13:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 16. Jan 2009, 14:16
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 16. Jan 2009, 14:28
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
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 16. Jan 2009, 14:43
Also mir hat man beigebracht, dass "exit" böse ist . Kannst du das Exit nicht mit anderen Konstrukten ersetzen?
Zum Thema Ablauf:
Zitat von lowmax_5:
Geht es schief, wird ein False zurückgegeben. Der Prozess wird dann aber mit einem 'Exit' in der Importroutine beendet.
Das versteh ich nicht. Was passiert wo wie...
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...
Jan
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 16. Jan 2009, 15:00
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
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Allgemeine Fragen zu Diensten/Services - Flusskontrolle

  Alt 21. Jan 2009, 16:09
Hat sich erledigt...

... ein Rückgabewert einer Funktion war nicht definiert!

lowmax
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz