AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigener Dienst beendet nicht korrekt...

Offene Frage von "cherry"
Ein Thema von cherry · begonnen am 15. Jan 2009 · letzter Beitrag vom 30. Apr 2009
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#31

Re: Eigener Dienst beendet nicht korrekt...

  Alt 30. Apr 2009, 12:27
Zitat von nahpets:
Bei Deiner Variante werden die Threads wohl von außen gestoppt und Du musst sicherstellen, dass sie auf das Beenden auch zeitnah reagieren. Besteht da nicht eventuell die Gefahr, dass Du das Problem auf eine andere Stelle verschiebst, wenn gerade in einem Thread eine For-Schleife abgearbeitet wird. Ist da sichergestellt, das der Thread auch "mitten" in der For-Schleife beendet wird. Besteht da dann die Möglichkeit, dass inkonsistente Daten übrig bleiben?
das würde dann genau so sein... nur lieber da als anderswo vermeiden kann mann das ja sowieso nicht, dass gewisse aktionen inmitten unterbrochen werden müssen.

Zitat von nahpets:
Meine (subjektive) Meinung ist: Über einen Schalter kontrolliert aus einer Routine aussteigen, um noch eine bestehende Aufgabe abzuschließen.
naja, irgendwie kann ich mich mit dieser methode auch nicht wirlklich anfreunden, ist irgendwie unschön. Diese Abfrage müsste dann ca. 30-Mal irgendwo in meinem Code stehen und da graut mir irgendwie davon. Nundenn, wenn das die Offizielle Lösung ist mache ich das gerne so. Ich würde aber auch noch gerne ein paar andere Meinungen hören, ich kann mir irgendwie nicht vorstellen, dass ich der Einzige bin der schon mal vor diesem Problem gestanden ist.

Zitat von nahpets:
Du gehst ja im Prinzip her und beendest die Threads nacheinander. Der zweite Thread erfährt also erst nach dem erfolgreichen Beenden des ersten Threads, dass er sich beenden soll, der Dritte nach dem Zweiten....
TerminateThread teilt dem Betriebssystem mit, das der Thread beendet werden soll und kehrt dann zurück, von dem her sollte das eigentlich gehen...

Zitat von nahpets:
Bei einem anderen Dienst habe ich kürzlich (zufällig) festgestellt, dass Windows 30 Sekunden wartet, bevor es einen Dienst "mit der Keule" erschlägt.
und wie hast du die Problematik anschliessend gelöst?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#32

Re: Eigener Dienst beendet nicht korrekt...

  Alt 30. Apr 2009, 13:19
Zitat von cherry:
Zitat von nahpets:
Meine (subjektive) Meinung ist: Über einen Schalter kontrolliert aus einer Routine aussteigen, um noch eine bestehende Aufgabe abzuschließen.
naja, irgendwie kann ich mich mit dieser methode auch nicht wirlklich anfreunden, ist irgendwie unschön. Diese Abfrage müsste dann ca. 30-Mal irgendwo in meinem Code stehen und da graut mir irgendwie davon. Nundenn, wenn das die Offizielle Lösung ist mache ich das gerne so. Ich würde aber auch noch gerne ein paar andere Meinungen hören, ich kann mir irgendwie nicht vorstellen, dass ich der Einzige bin der schon mal vor diesem Problem gestanden ist.
Ne, bist bestimmt nicht der Einzige aber vermutlich gibt es "die" Lösung nicht. Meine Lösung ist sicherlich nicht gerade elegant, wohl auch kaum als objektorientiert zu bezeichnen, brachte aber mit vertretbarem Aufwand die erwünschte Lösung. Aber das kommt dann sicherlich auf den Einzelfall an. Wenn Du so eine Lösung nur implementieren kannst mit einer Unmenge von zusätzlichen Abfragen, dann ist das bestenfalls als suboptimal zu bezeichnen.
Zitat von cherry:
Zitat von nahpets:
Du gehst ja im Prinzip her und beendest die Threads nacheinander. Der zweite Thread erfährt also erst nach dem erfolgreichen Beenden des ersten Threads, dass er sich beenden soll, der Dritte nach dem Zweiten....
TerminateThread teilt dem Betriebssystem mit, das der Thread beendet werden soll und kehrt dann zurück, von dem her sollte das eigentlich gehen...
D. h. aber, dass der Thread mehr oder weniger "unkontrolliert" beendet wird und ein Datenbankzugriff eventuell "mittendrin" abgebrochen wird. Es könnte also sein, dass Transaktionen weder mit Commit noch mit Rollback beendet werden? Stelle mir das immer so vor wie: Datenbankapplikation per Taskmanager beenden. Das ist etwas, das ich äußerst ungerne mache.
Zitat von cherry:
Zitat von nahpets:
Bei einem anderen Dienst habe ich kürzlich (zufällig) festgestellt, dass Windows 30 Sekunden wartet, bevor es einen Dienst "mit der Keule" erschlägt.
und wie hast du die Problematik anschliessend gelöst?
Garnicht, da war auf dem Rechner so Allerlei abgestürzt und hatte sich gegenseitig in die Knie gezwungen, habe nicht herausgefunden, was da die eigentliche Ursache des Problemes war. Vermutlich aber der Neustart eines anderen Servers, auf dessen Datenbanken zu diesem Zeitpunkt zugegriffen wurde.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 10:10 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