Code nach exit()



  • Hi, ich habe einen Thread, der exit(0) ausführt und dazu ein Window
    Code:

    hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadId);
    	while(GetMessage(&msg, NULL, 0, 0)) {
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	CloseHandle(hThread);
    	FreeLibrary(dll);
    	WSACleanup();
    return 0;
    

    Also der Thread hThread führt direkt exit(0) aus und damit schließt sich das Programm.
    Und jetzt frage mich, ob der Code weiter unten noch ausgeführt wird.
    Also das

    CloseHandle(hThread);
    	FreeLibrary(dll);
    	WSACleanup();
    

    Das ist ja zum "Aufräumen".
    Wird das noch ausgeführt? Ist das überhaupt notwendig, oder wird sowieso aufgeräumt, wenn sich das Programm schließt?



  • Aus reiner (ANSI)-C-Sicht wird mit dem Aufruf von exit() die Liste der via atexit() registrierten Funktionen abgearbeitet. Inwiefern durch Multithreading/processing da evtl. Seiteneffekte auftreten, klären wir besser im WinAPI-Forum.



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mach doch mal direkt hinter CreateThread() nen Sleep(5000) oder so und lass dann hinter WSACleanup() noch ne MessageBox() aufpoppen oder so.
    Kommt keine MessageBox() wird das Programm wohl abgewürgt.

    Rein-theoretisch wird sowieso aufgeräumt, aber sauber wäre das nicht 😉
    Besser wäre z.B. wenn der Thread statt exit() an dein Fenster z.B. nen WM_CLOSE sendet.


Anmelden zum Antworten