_beginthread() und CreateThread
-
hallo
meine frage ist sicher schon irgendwie aus dem topic ersichtlich. ich würde gern wissen wo jetzt genau der unterschied zwischen dein beiden liegt und wann ich das eine nehme und wann das andere
gelesen hab ich das ich _beginthread() usw. nehme wenn ich c runtimefunktionen in meinem programm verwende...wie ist das denn dann mit CreateThread...wann kann ich das verwenden? ich meine bei mir dürfte es ja dann nur das erste sein weil ich oft gebrauch von malloc und den ganzen anderen funktionen gebrauch mache....naja vielleicht kann mir jmd zur erleuchtung helfen
bye
tt
-
beginthread verwendet CreateThread, um Windows zu sagen, dass ein Threadobjekt zu erstellen ist. Wenn du also die CRT nicht brauchst, reicht es, CreateThread aufzurufen und sich somit die Vorbereitung der CRT auf den Beginn eines Threads zu sparen.
-
nun zu der frage was ist ein CRT?
bye
tt
[ Dieser Beitrag wurde am 04.07.2003 um 14:26 Uhr von TheTester editiert. ]
-
C Runtime Library
-
Um es etwas verständlicher zu machen:
CreateThread ist eine WinAPI Funktion. Sich macht nichts anders als Windows zu sagen das dein Prog nen neuen Therad braucht. Da wir aber in C/C++ programmieren reicht das selten. In C gibt es ne Menge globale Variable von denen jeder Thread eine Version besitzt. Eine davon ist z.B. errno. Was passiert nun in nem mit CreateThread erzeugen Thread wenn du ne C-Funktion aufrufst die auf errno zugreift? Nein, es kracht nicht, der Variablenblock wird angelegt, da er ja für den Thread noch nicht existiert. Interssant wird es jetzt dein Thread ausläuft. Niemand fühlt sich für den Speichrblock mehr verantwortlich, da sich die WinAPI nur um ihre Sachen kümmert und die CRT nie richtig initaliert wurde -> Speicherloch.
Würdest du statt dessen _beginthread verwenden, wird dieser Thread-eigene Speicherblock schon beim erzeugen des Therad angelet und beim beenden wieder freigegeben.
Ich verwende in C/C++ IMMER _beginthread.[ Dieser Beitrag wurde am 04.07.2003 um 14:39 Uhr von CMatt editiert. ]
-
oh man...auf die abkürzung von crt hätte man ja noch selbst kommen müssen *gg*
thx
-
Um auch mal etwas klugzuscheissen:
Niemals einen Thread mit _endthread() abschiessen.
Immer sauber beenden lassen. Sonst Speicherleaks.
-
Hi -King-
-
Hi TKool
-
Soll man am Ende des Thread jetzt _endthread() schreiben, oder nicht?
-
Nein, einfach mit "return" raus!
-
Man könnte mal in die MSDN schauen, oder?
You can call _endthread or _endthreadex explicitly to terminate a thread; however, _endthread or _endthreadex is called automatically when the thread returns from the routine passed as a parameter to _beginthread or _beginthreadex. Terminating a thread with a call to endthread or _endthreadex helps to ensure proper recovery of resources allocated for the thread.