Programm beenden ohne Threads beenden?



  • Hallo,

    Was Passiert wenn ich ein Programm mit laufenden Thread beenden, ohne das ich davor die Threads beende?? Laufen die Thread als Ghost-Thread im System weiter, oder werden sie gezwungenermaßen terminiert?



  • Wenn Du die CRT verwendest (was Du i.d.R. machst), dann wird hier ExitProcess aufgerufen und der Prozess wird beendet.

    Siehe: When does a program terminate?
    http://blog.kalmbachnet.de/?postid=65



  • Wenn der Prozess terminiert terminieren auch alle Threads. Die Frage ist bloss OB der Prozess terminiert 🙂



  • hustbaer schrieb:

    Wenn der Prozess terminiert terminieren auch alle Threads. Die Frage ist bloss OB der Prozess terminiert 🙂

    Aber *nur* wenn man "ExitProcess" aufruft! Wenn man nur aus der "main" Funktion rausspringt, dann nicht (es sei denn die CRT ruft ExitProcess auf).


  • Mod

    Jochen Kalmbach schrieb:

    Wenn man nur aus der "main" Funktion rausspringt, dann nicht (es sei denn die CRT ruft ExitProcess auf).

    Wie kann man aus der main Funktion rausspringen ohne dass eine der CRT exit Funktionen aufgerufen werden?
    Dazu müsste man IMHO doch den CRT Startup Code manipulieren, oder den Stack, oder meinst Du etwa direkt ExitThread oder _endthreadex aufrufen?
    böse, böse, böse 😉



  • Ich meine: Einfach die CRT nicht verwenden:

    #include <windows.h> 
      #include <tchar.h> 
      #pragma comment(linker, "/entry:myMain") 
      DWORD WINAPI MyThread2(LPVOID) 
      { 
        TCHAR szText[] = _T("I am in Thread 2!n"); 
        while(1) 
        { 
          Sleep(1000); 
          DWORD dwWritten; 
          WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szText, _tcslen(szText), &dwWritten, NULL); 
        } 
        return 0; 
      } 
      int WINAPI myMain() 
      { 
        DWORD dwThreadId; 
        CloseHandle(CreateThread(NULL, 0, MyThread2, NULL, 0, &dwThreadId)); 
        return 0; // hier wird der "Entry-Thread" beendet, aber der Prozess läuft trotzdem weiter!
      }
    


  • @Jochen: nene, ich meinte: WENN der Prozess terminiert sind auch alle seine Threads weg ... wenns noch einen Thread gibt, dann gibts auch noch den Prozess 🙂


Anmelden zum Antworten