Borsdorf, Thomas
2008-04-30 20:11:30 UTC
Hi NG!
Ich hab mich, mal wieder, mit Threads auseinandersetzen müssen. Und
sofort hab ich eine Frage.
Folgendes Problem:
Ich habe in meiner Anwendung (die bestimmt mal zum Service wird...)
mehrere Threads, die Aufgaben triggern. Diese Aufgaben sollen zu
bestimmten Zeiten laufen, also z.B. alle 15min., jede Stunde, einmal am
Tag etc. Mein Ansatz, inspiriert von einem Ex-Kollegen der das mal so in
C++ realisiert hat, ist der das ich im Thread.Execute die Wartezeit bis
zum Ausführen berechne und den Thread dann schlafen schicke (mit sleep).
Nach dem sleep folgt die Verarbeitung, danach wird die Zeit bis zum
nächsten Ausführen neu berechnet etc. Das Ganze funktioniert wunderbar.
Auch wenn die Wartezeit einige Minuten oder auch Stunden ist klappt es.
Jetzt will ich die Anwendung (bzw. den Service) aber auch mal beenden.
Ein Thread.Terminate bringt hier nicht viel, da der Thread ja im sleep
hängt. Er wartet also bis der sleep rum ist, vielleicht also bis in ein
paar Stunden, dann wird er beendet. Aber das will ich natürlich nicht,
die Anwendung soll ja SOFORT beendet werden, spätestens nach wenigen
Sekunden.
Also hab ich TerminateThread ausprobiert. Das funktioniert natürlich,
nur ist das bestimmt nicht Mittel der Wahl, wobei es beim Beenden der
Anwendung vielleicht nicht so dramatisch ist.
Und jetzt die Frage:
Ist das wirklich so harmlos wie ich mir das vorstelle?
Ist der Ansatz grundsätzlich okay oder ein absolutes No-Go?
Welcher Ansatz wäre besser?
Hat jemand sowas schonmal realisiert? Auf welchem Weg?
MfG Thomas.
Ich hab mich, mal wieder, mit Threads auseinandersetzen müssen. Und
sofort hab ich eine Frage.
Folgendes Problem:
Ich habe in meiner Anwendung (die bestimmt mal zum Service wird...)
mehrere Threads, die Aufgaben triggern. Diese Aufgaben sollen zu
bestimmten Zeiten laufen, also z.B. alle 15min., jede Stunde, einmal am
Tag etc. Mein Ansatz, inspiriert von einem Ex-Kollegen der das mal so in
C++ realisiert hat, ist der das ich im Thread.Execute die Wartezeit bis
zum Ausführen berechne und den Thread dann schlafen schicke (mit sleep).
Nach dem sleep folgt die Verarbeitung, danach wird die Zeit bis zum
nächsten Ausführen neu berechnet etc. Das Ganze funktioniert wunderbar.
Auch wenn die Wartezeit einige Minuten oder auch Stunden ist klappt es.
Jetzt will ich die Anwendung (bzw. den Service) aber auch mal beenden.
Ein Thread.Terminate bringt hier nicht viel, da der Thread ja im sleep
hängt. Er wartet also bis der sleep rum ist, vielleicht also bis in ein
paar Stunden, dann wird er beendet. Aber das will ich natürlich nicht,
die Anwendung soll ja SOFORT beendet werden, spätestens nach wenigen
Sekunden.
Also hab ich TerminateThread ausprobiert. Das funktioniert natürlich,
nur ist das bestimmt nicht Mittel der Wahl, wobei es beim Beenden der
Anwendung vielleicht nicht so dramatisch ist.
Und jetzt die Frage:
Ist das wirklich so harmlos wie ich mir das vorstelle?
Ist der Ansatz grundsätzlich okay oder ein absolutes No-Go?
Welcher Ansatz wäre besser?
Hat jemand sowas schonmal realisiert? Auf welchem Weg?
MfG Thomas.