Threads sauber beenden
-
Hi
Ich starte durch einen Button einen Thread über den 4 weitere Threads gestartet werden so das ich noch auf die Oberfläche reagieren kann. Durch einen klick auf einen anderen Button sollen die Threads beendet werden.
Wie kann ich die laufende Threads sauber im Betrieb beenden?Ich habs mit Thread.Abort() geregelt, was aber nicht immer zu 100% funktioniert.
PS: In den Threads befindet sich eine Schleife welche so schnell wie möglich durchlaufen werden muss, weshalb ich dort z.B. keine If-Bedingung einfügen kann.
mfg
Fonce
-
Fonce schrieb:
PS: In den Threads befindet sich eine Schleife welche so schnell wie möglich durchlaufen werden muss, weshalb ich dort z.B. keine If-Bedingung einfügen kann.
Genau das ist aber das einzig richtige. Du schaffst eine Stelle im Threadcode wo du mit einer Bedingung entscheidest ob weitergearbeitet werden soll, oder einfach mit nem return die Funktion verlassen wird. Von außerhalb setzt du dann diese Bedingung wenn der Thread verlassen werden soll.
Über die Geschwindigkeit sollte man sich keine Sorgen machen dabei, nen if juckt niemanden. Wenn es noch um deinen Benchmark geht, ist es eh egal, da du ne konstante Zeit hast die jeden Durchlauf beeinflusst und eine unberechnebare Größe. Außerdem kannst du ja, wenn es unbedingt drauf ankommt die Zeitmessung halt so gestalten dass das if net mitgezählt wird.
-
Bedeuted aborted in c#, stop in java?
-
Einfach mal die _ganze_ Doku dazu lesen.
http://msdn.microsoft.com/de-de/library/ty8d3wta(VS.80).aspx
-
so kann man es tun!!!
class YourThreadClass :IDisposable { public YourThreadClass() { new Thread(new ThreadStart(()=> { while (!_stop) { //HER MACH WAS } })); } ~YourThreadClass() { Stop(); } public void Stop() { _stop = true; } private volatile bool _stop = default(bool); }
-
[quote="Talla"]
Fonce schrieb:
Über die Geschwindigkeit sollte man sich keine Sorgen machen dabei, nen if juckt niemanden.
Ein Vergleich bremst die Geschwindigkeit...
Schon immer so gewesen...
-
Das schnellste Programm hat keinen Code ...