Thread endgültig beenden
-
Hallo,
ich möchte, dass ein Thread, den ich mit
TPing *SecondProcess = new TPing(false); // Thread erzeugenerzeuge und starte sich automatisch nach Ablauf der Execute-Methode beendet. Dies sollte ja so laufen, da ja bei "new TPing" false mit übergeben wird.
Jedoch erscheint im Thread-Statusfenster der Thread mit dem verwunderlichen Zustand "Angehalten". Wird der Thread also nicht automatisch beendet?
Was müsste ich zusätzlich tun?
-
FreeOnTerminat ???
-
FreeOnTerminate steht auf false.
-
Eben!!!
-
Geht aber genauso wenig, wenn auf true gesetzt!
-
Hast Du in Execute ein Suspend drin?
Wertest Du in Execute Terminated aus zum Schleifenabbruch?
-
So sieht Execute aus:
void __fastcall TPing::Execute() { while (!Terminated) //wenn Thread nicht unterbrochen wurde: { try //Ping an Rechner abschicken { Synchronize(Pingen); Form1->NextPing(); } catch (Exception &E) //Fehlerbehandlungsroutine (z.B. Fehlermeldung erzeugen) { Synchronize(Fehlerbehandlungsroutine); Form1->NextPing(); } Application->ProcessMessages(); } }Und so die Funktionen
void __fastcall TPing::Pingen() { int PingAntwortZeit = PingHost(Form1->aktuellerrechnername->Caption, NULL); //angepingter PC am Netz? if (PingAntwortZeit!=-1) //wenn PC am Netz: Form1->aktuellerrechnerstatus->Caption="PC_im_Netz"; else Form1->aktuellerrechnerstatus->Caption="PC_nicht_im_Netz"; //wenn nicht im Netz: } //--------------------------------------------------------------------------- void __fastcall TPing::Fehlerbehandlungsroutine() { Form1->aktuellerrechnerstatus->Caption="PC_nicht_im_Netz"; }
-
Mach mal am Ende von Execute (nach der Schleife!) irgendeinen Befehl rein.
zB: int i;
i++;und mach darauf nen Haltepunkt!
Teste mal ob der angefahren wird?
-
Wird nicht angefahren! (?)
Warum denn das nicht?
Muss der Fehler in NextPing() liegen?
-
Der ZThread kommt also nicht aus der Schleife raus!
Wann wird der Thread terminated???
PS: Deine Schleife muss ein Ende finden koennen - mit geeigneter Bedingung. Osder das Hauptprogramm muss Terminate rufen!
-
Danke für die Hilfe, die mich doch weiter gebracht hat. Jetzt hänge ich aber gerade an dem Problem http://www.c-plusplus.net/forum/viewtopic-var-p-is-736630.html#736630