CreateThread AfxBeginThread _beginthreadex - Unterschiede



  • Hallo,
    ich hätte mal eine generelle Frage,
    welches sind die Unterschiede zwischen
    CreateThread, AfxBeginThread und _beginthreadex und vor allem wann nehme ich welches?
    würde gerne damit den Thread hier starten. Mit _beginthreadex klappt es nicht. hat
    jemand von Euch einen Tipp?

    static unsigned __stdcall ThreadCom(void *pParam);
    
    m_hThread = (HANDLE) _beginthreadex(0,0,CComPort::ThreadCom,(void*)this,0,0 );
    

    ab und zu muß man das doch auch als

    static WINAPI ThreadCom(void *pParam);
    

    deklarieren. Wann macht man das denn.

    Danke 🙂



  • CreateThread ist eben WinAPI, AfxBeginThread von MFC und _beginthreadex von der C/C++-Runtime-Environment. Afaik solltest du _beginthread(ex) verwenden, da du sonst unter Umständen bei manchen C/C++-Funktionen unerwartetes Verhalten bekommst, da die RTE nicht mitbekommen hat, dass du mehrere Threads hast (oder so ähnlich zumindest). Wie es sich diesbezüglich mit AfxBeginThread genau verhält weiß ich aber auch nicht.

    jower schrieb:

    Mit _beginthreadex klappt es nicht.

    Was heißt das genau? Bekommst du Fehlermeldungen, oder startet er einfach nur keinen neuen Thread?



  • Lesen bildet:

    A thread that uses functions from the static C run-time libraries should use the beginthread and endthread C run-time functions for thread management rather than CreateThread and ExitThread. Failure to do so results in small memory leaks when ExitThread is called. Note that this is not a problem with the C run-time in a DLL.

    😃



  • hallo,

    @flenders
    kompilierfehler bekomme ich nicht, auch springt das Programm in die Threadfunktion , wenn ich mir das mit dem debugger angucke, aber irgendwie scheint kein Thread gestartet zu werden.
    Gruß


Anmelden zum Antworten