CWinThread - Beenden
-
Hi,
Die Klasse TThread der VCL hat eine boolsche Variable Terminated, die man setzen kann und die Funktionen des Threads prüfen können und ihn dann beenden können. Gibts sowas in CWinThread auch? Hab nämlcih nix dergleichen gefunden ...
-
Nee, das musst du leider selber machen.
-
schlecht .....
CWinThreads kann cih von aussen nur über TerminateThread beenden, oder?
-
Leite doch selbst eine Klasse von CWinThread ab wo du noch diese Statusvariable mit einbaust. Auf TerminateThread sollte man ja eher verzichten
-
Ja, wird nix anderes übrigbleiben.
-
Ich hab das damals so gemacht:
- Threadfunktion als statische Memberfunktion einer Klasse
- Statusvariable in derselben Klasse
- Statusvariable in der Abbrechen-Funktion des Hauptthread auf false gesetzt
- in der Threadfunktion diese Variable abgefragt
-
Ich weiß ja nicht was die VCL mit dem Thread macht wenn man diese Variable setzt.
Killt sie ihn einfacht.
Das gibt es in MFC auch. Hast du bereits geschrieben. (TerminateThread )Das Problem ist ja dabei nicht den Thread zu killen sondern Aufzuräumen.
Dies macht die die VCL genausowenig wie die MFC da sie ja nicht wissen können was du in dem Thread machen möchtest.Schaue dir mal das CWinThreadprogramm von meine HP an.
Dort erstelle ich eine Klasse die von CWinThread abgeleitet ist.
-
Kleiner Asuzug aus der Beschreibung zu dieser Variable:
Indicates whether the thread has been asked to terminate.
property Terminated: Boolean;
Description
The thread's Execute method and any methods that Execute calls should check Terminated periodically and exit when it's True. The Terminate method sets the Terminated property to True.
The Terminate method is the polite way to abort the execution of a thread, but it requires cooperation from the thread’s Execute code. Using Terminate is recommended over the TerminateThread Win32 API call.
Also, der Thread wird da nciht sofort beendet, sondern "höflich gebittet sich zu beenden".
-
Ich denke aber das man im Thread die Variable auc h auslesen muß um z.B. Datein zu schließen etc.
Wenn ja: Ist im Grunden nicht anderes als wenn man in einer CWinThreadKlasse eine boolvar definiert und diese ebenfalls abfragt.
Vielleicht in der VCL noch Threadsicher aber das kann man ja in MFC auch leicht machen.