Funktion von aussen beenden



  • Ist es möglich eine Funktion von aussen zu beenden?

    Beispiel:

    int Funktion
    {
      while(){}
      return 0;
    }
    
    int AeussereFunktion()
    {
       Beenden Funktion();
    }
    

    So was will ich nicht machen:

    bool run=true;
    
    int Funktion
    {
      while(run){}
      return 0;
    }
    
    int AeussereFunktion()
    {
       run=false;
    }
    


  • während Funktion läuft, läuft keine andere Funktion...
    äussereFunktion wird also nie ausgeführt.

    suchst du uU 'Threads'?



  • ötzi schrieb:

    So was will ich nicht machen...

    Anders gehts aber nicht.



  • naja falls es threads sind kann man die in der regel von aussen terminieren, oder? ist aber systemabhängig und somit auch kein standard C++ thema mehr...



  • Fuer Dein beschriebenes Programm brauchst Du zwei Threads.
    Der Primaerthread - wird mit dem Programm gestartet - kreiert
    den zweiten.

    Thread werden i.a. synchronisiert. Dazu werden passende Objekte
    wie Mutexe, Semaphoren, Ereignisse etc verwendet.

    Ein Thread sollte sich stets selbst beenden. Dazu ueberprueft der
    Thread z.B. ein Ereignis-Objekt auf 'signalled' und beendet
    sich im positiven Fall.

    Auch eine Terminierung von aussen ist moeglich, stellt aber i.a.
    nur die Notfall-Variante dar.

    Entsprechende Funktionen in den C-Laufzeitbibliotheken
    findet man meist in der Hilfe zum Compiler.

    Ich hoffe, Du kannst mit diesem kleinen Ausflug ins Multithreading
    etwas anfangen.



  • Die Terminierung eines Threads "von außen" stellt nicht nur eine Notfallvariante dar, man sollte diese Möglichkeit fast nie einsetzen.
    Man sollte auch genau wissen, was geschieht, wenn ein Thread so beendet wird. Wenn ein Thread endet, werden die Destruktoren für alle thread-lokalen Objekte aufgerufen. Es werden also Dateien geschlossen, Resourcen freigegeben u.ä.. Wenn ein Thread von außen abgeschossen wird, entfällt das alles und man riskiert ein inkosistentes System, außerdem Resourcenlecks.
    Im schlimmsten Fall können die anderen Threads ihre Arbeit dann auch nicht mehr fortsetzen und stürzen selbst ab.


Anmelden zum Antworten