Thread start/ stopp / neustart



  • Hallo zusammen, hab mal wieder eine einfache frage.

    Ich hab ein Threadobjekt erstellt. mit new kann ich das anlegen. mit Terminate kann ich das beenden, aber wie bekomme ich das neu gestartet?

    private:
        MyThread *test
    
    // thread anlegen und anhalten
    test = new MyThread(true);
    
    // Laufen lassen
    test->Resume();
    
    //Pause
    
    test->Suspend();
    
    //Beenden
    
    Terminate();
    

    wie bekomme ich den Thread nach Terminate neu gestartet? Wenn das nur mit new geht, was frage ich ab ob der thread schon läuft!?

    meine idee war ja

    if(!test)
     test = new MyThread(true);
    

    aber selbst wenn FreeOnTerminate true ist, funktioniert das nicht.



  • NaJa, nach Terminate gibt es den Thread halt nicht mehr.
    Gruß Rudi



  • Aber ich muss den Thread doch irgendwie verhindern können das der Thread mehrfach ausgeführt wird. Und das kann ich doch nur indem ich gucke ob er noch läuft. wenn er aber noch nicht exestiert und ich gucke nach, dann gibts logischerweise dicke fehlermeldung (access violation)



  • Na ja, ich kenn jetzt nicht den Aufbau deines Programms, aber eine Möglichkeit wäre jedenfalls, dem Thread einen Pointer auf beispielsweise eine Bool-Variable zu übergeben, die schon mit true initialisiert ist (und irgendwo beim Form drin ist oder so).
    Wenn der Thread fertig ist (also am Ende von Execute) setzt er Variable auf false.

    Im Hauptteil deines Programms kannst du dann jederzeit gucken, ob diese Bool-Variable false ist. Wenn nicht, läuft der Thread noch, wenn doch, ist der Thread beendet, du setzt die Variable wieder auf true und startest wieder den Thread.

    Aber es geht sicher auch eleganter, man kann ja dem Thread auch einen Namen geben etc.


Anmelden zum Antworten