Wie bricht man einen Endlosschleifen-Thread sicher ab?
Verfasst: 19.10.2015 22:27
Hallo Leute,
folgende Situation:
Ich habe einen Thread mit Endlosschleife (damit ich nicht immer wieder den Thread starten/erstellen muss) in dem WaitSemaphore() darauf wartet ein Signal zu bekommen und dann ein gewisser Code ausgeführt wird.
Nun möchte ich aber irgendwann diesen Thread wieder beenden bzw. abbrechen, wie gehe ich nun vor?
Die Abbruchbedingung setzen, dann aber auch allen Semaphores ein Signal zu geben, dann aber vorher noch zu testen, ob der Code denn wirklich noch ausgeführt werden soll.Aber ist das wirklich sinnvoll?
Ist das überhaupt sicher, wenn mit einem mal alle den Wert von 'Abbruchbedingung' lesen?
Gibt es einen anderen Weg?
folgende Situation:
Ich habe einen Thread mit Endlosschleife (damit ich nicht immer wieder den Thread starten/erstellen muss) in dem WaitSemaphore() darauf wartet ein Signal zu bekommen und dann ein gewisser Code ausgeführt wird.
Nun möchte ich aber irgendwann diesen Thread wieder beenden bzw. abbrechen, wie gehe ich nun vor?
- KillThread() ist zu radikal, und ermöglicht den Thread nicht seinen Stack aufzuräumen.
- Eine Abbruchbedingung der Endlosschleife kann unmöglich erreicht werden, wenn WaitSemaphore() im Wartemodus ist.
- TrySemaphore() mit eigenem Delay() erscheint mir zu unsauber, zumal es dann Problem bei mehreren Semaphores gibt, da müsste ich dann mehrere Schleifen ineinander packen, damit ein Try nicht mehrmals ausgeführt wird.
Die Abbruchbedingung setzen, dann aber auch allen Semaphores ein Signal zu geben, dann aber vorher noch zu testen, ob der Code denn wirklich noch ausgeführt werden soll.
Code: Alles auswählen
Procedure MyThread(Void)
Repeat
WaitSemaphore()
If Abbruchbedingung
Break
EndIf
; Do what you have to do!
ForEver
EndProcedure
Ist das überhaupt sicher, wenn mit einem mal alle den Wert von 'Abbruchbedingung' lesen?
Gibt es einen anderen Weg?