Thread beenden
-
Hallo Leute!
mit _beginthread() kann ich ein Thread öffnen.
Aber wie kann ich den Thread vorzeitig beenden??
danke.
-
Oder mal anders gefragt:
ich möchte einen Wecker programmieren.
wie soll ich das überprüfen der Zeiten auslagern?
Wenn der Alarm ertönen soll, word eine Virtual aufgerufen.
-
Script-Styler schrieb:
Aber wie kann ich den Thread vorzeitig beenden??
Aus dem Thread heraus mit _endthread(ex), allerdings geht das auch einfach mit return. Außerhalb des Threads kannst Du dem Thread nur 'sagen' er soll sich beenden (durch Änderung einer Variable, einer sogenannten Kontroll- oder Statusvariable, auf deren Wert intern, also im Thread, regelmäßig überprüft wird).
Script-Styler schrieb:
wie soll ich das überprüfen der Zeiten auslagern?
Warum willst Du das denn überhaupt auslagern - dauert doch eigentlich nicht lange.
Script-Styler schrieb:
Wenn der Alarm ertönen soll, word eine Virtual aufgerufen.
Ein was wird aufgerufen
?
-
ja, eine Fuktion, die ich nicht in der klasse definiere, sondern erst beim Aufruf.
aber wie implementiere ich so was?
-
Script-Styler schrieb:
ja, eine Fuktion, die ich nicht in der klasse definiere, sondern erst beim Aufruf.
Wie bitte WAS
?Falls Du von virtuellen Methoden in Bezug auf C++ redest, verstehe ich nicht, was die in diesem Kontext zu suchen haben.
-
Vielleicht hilft dir das hier weiter:
DWORD WINAPI MyThread( LPVOID pt ) { while (1) { if ( uhrzeit == starte_funktion ) break; } return 0; } .... WaitForSingleObject( hMyThread, INFINITE ); if ( ExitProcess == 0 ) starte_funktion ...
-
nein nein!
das meine ich net.
man declared im klassenheader eine virtual void Rnn(void);
aber wie macht man das genau? ich hab da mal irgendwo was zu gelesen, aber wo?

thx.
-
TerminateThread
-
Script-Styler schrieb:
man declared im klassenheader eine virtual void Rnn(void);
aber wie macht man das genau? ich hab da mal irgendwo was zu gelesen, aber wo?

Hm, ... was ist eigentlich Dein Ziel (und erzähl mir jetzt nix von Deinem Wecker
)?
Zur Zeit sieht es aus, als wolltest Du einen WinAPI-Thread in eine Klasse (C++) wrappen...
.
-
häh schrieb:
TerminateThread
Ist unsauber, sollte man nicht verwenden!
-
So in der Art.
ich habe eine Weckerklasse (CAlarm).
Daort kann man mit SetAlarm und Activate den Alarm aktivieren.
Dann soll der Thread ,der die Zeit prüft, mit Start gestartet, mit Stop beendet werden.
Sobald da die Zeiten übereinstimmen soll eine Klassenmethode virtual aufgerufen Werden, die man beim Klassenaufruf deklariert. das soll quasi so eine art callback sein. also nur auf start und dann kommt schon irgendwann der Aufruf...
-
Oha, da gehen einige Begriffe durcheinander, also definieren und deklarieren tut man beim Schreiben des Quellcodes.
Vielleicht hilft Dir das weiter: http://www.codeproject.com/threads/memberthreads.asp evtl. auch http://www.codeproject.com/threads/cthread.asp
-
CodeFinder schrieb:
häh schrieb:
TerminateThread
Ist unsauber, sollte man nicht verwenden!
Komm plapper nicht Jochen nach, die Funktion gibt es und das hat auch seinen Grund.
-
ja also mit "bei der laufzeit deklarieren" meine ich:
CAlarm Alarm;
void Alarm.Run(void) {}
das.
aber ist das richtig udn wie geht das genau?
danke schonmal.
-
häh schrieb:
CodeFinder schrieb:
häh schrieb:
TerminateThread
Ist unsauber, sollte man nicht verwenden!
Komm plapper nicht Jochen nach, die Funktion gibt es und das hat auch seinen Grund.
Troll
-
TerminateThread regulär zu verwenden ist unverantwortlich!
Nehmen wir nur mal ein ein Thread verwendet eine eigene Funktion oder OS Funktion die intern einen Mutex oder eine CriticalSection blockiert und nun kommt ein anderer Thread daher und sagt TerminateThread...
Wenn alles gut geht hängt sich nur die eigene Applikation auf.Nur aus der Existenz einer Funktion zu schließen, dass jeder diese Funktion jederzeit aufrufen kann ist ziemlich ignorant.
Das hat nichts mit nachplappern zu tun sondern mit Nachdenken und Intelligenz...
-
achso, also mit kontrollstrukturen arbeiten.
aber was mache ich jetzt mit meinem Wecker? <== darum geht's ja eigentlich.
-
Martin Richter schrieb:
TerminateThread regulär zu verwenden ist unverantwortlich!
Nehmen wir nur mal ein ein Thread verwendet eine eigene Funktion oder OS Funktion die intern einen Mutex oder eine CriticalSection blockiert und nun kommt ein anderer Thread daher und sagt TerminateThread...
Wenn alles gut geht hängt sich nur die eigene Applikation auf.Nur aus der Existenz einer Funktion zu schließen, dass jeder diese Funktion jederzeit aufrufen kann ist ziemlich ignorant.
Das hat nichts mit nachplappern zu tun sondern mit Nachdenken und Intelligenz...
Man benutzt TerminateThread auch nur, wenn man weiß, daß der Thread so etwas nicht tut. Wer soweit nicht denken kann, ja, der sollte die Funktion lieber nicht nutzen. Ich weiß aber, was meine eigenen Threads tun und wann es gut ist sie zu terminieren. Die Funktion hat schon seinen Sinn.
-
threadfunktion
while !threadBeenden { tu das wecker zeug }...
andere funktion zum beendenif buttonGedrückt threadBeenden = true
-
So eine Variable kannst du nicht aus einem anderen Thread heraus setzen, da bekommst du Problem wegen Caching. Da muss die Variable volatile sein.