Thread beenden



  • Hallo!

    Angenommen, ich erstelle einen neuen Thread mit CreateThread.
    Die Thread Funktion sieht so aus:

    DWORD ThreadFunc(void* param)
    {
      //mach irgendwas ...
      return 0;
    }
    

    Wie wird der Thread dann wieder beendet?
    Springt die Funktion mit return 0; zurück in eine Funktion die von der C Runtime/OS zur Verfügung gestellt wird wo dann irgendeine Form von ExitThread(0) aufgerufen wird?
    Also so in der Art:

    void ExecThreadFunc(void* param)
    {
      ExitThread(ThreadFunc(param));
    }
    

    Weil nur das return 0; beendet ja nichts...



  • Irendwer hat den Thread ja aufgerufen...
    Nach dem return gehts dorthin zurück.
    Dann folgt ein Aufruf von "RtlExitUserThread"(parameter vermutlich das was du eben returnt hast) das dann "ZwTerminateThread" aufruft, das wiederum ist ein syscall Wrapper.
    Naja und der Kernel beendet den Thread dann.



  • DarkShadow44 schrieb:

    Irendwer hat den Thread ja aufgerufen...
    Nach dem return gehts dorthin zurück.
    Dann folgt ein Aufruf von "RtlExitUserThread"(parameter vermutlich das was du eben returnt hast) das dann "ZwTerminateThread" aufruft, das wiederum ist ein syscall Wrapper.
    Naja und der Kernel beendet den Thread dann.

    ok danke!



  • DarkShadow44 schrieb:

    Irendwer hat den Thread ja aufgerufen...
    Nach dem return gehts dorthin zurück.

    Was meinst Du mit 'dahin zurück'? Der Thread könnte von einem anderen Thread gestartet worden sein, der längst nicht mehr existiert.



  • Ich meinte, das OS muss den Thread irgendwo gestartet haben. Und das läuft normal so ab, dass das OS den Thread erstellt, bei dem zuerst irgendeine Wrappermethode aufgerufen wird die dann deine ThreadFunc aufruft. Nach dem verlassen deiner ThreadFunc gehts zurück in die Wrappermethode, die dann dafür sorgt dass das OS den Thread beendet und aufräumt.



  • Belli schrieb:

    DarkShadow44 schrieb:

    Irendwer hat den Thread ja aufgerufen...
    Nach dem return gehts dorthin zurück.

    Was meinst Du mit 'dahin zurück'? Der Thread könnte von einem anderen Thread gestartet worden sein, der längst nicht mehr existiert.

    threads werden im usermode über CreateThread gespawnt bzw. dann daten zum os kernel weitergeleitet, welcher den thread dann spawnt und gewisse daten verwaltet usw. nur die CreateThread returned dann, egal in welchem thread die winapi func aufgerufen wurde. verstehe also nicht, was du meinst. 😕



  • CreateThread kehrt ja sofort nach Erstellung des Threads zurück, das hat nichts mit der return-Anweisung in der Thread-Funktion zu tun. Dahin zielte aber die Frage nach meinem Verständnis.
    Wenn also eine Thread-Funktion return aufruft, dann gehts nicht dahin zurück, von wo CreateThread aufgerufen wurde.


  • Mod

    Genauer wäre gewesen:

    Irgend jemand hat ja die Thread-Funktion aufgerufen!

    Dorthin kehrt die Thread-Funktion zurück und dort wird der Thread beendet.



  • Hihi, das hat mich auch gestört.



  • das ist aber trivial. 🤡


Anmelden zum Antworten