2010-01-20 4 views
10

Was ist der Unterschied zwischen CreateThread und beginThread APIs in Windows? Welches ist für die Thread-Erstellung vorzuziehen?_beginthread vs CreateThread

Antwort

15

_beginthread() und _beginthreadex() wurde von früheren Versionen des Microsoft CRT benötigt, um Thread lokalen Status zu initialisieren. Die strtok() Funktion wäre ein Beispiel. Das wurde behoben, dieser Zustand wird jetzt, zumindest seit VS2005, dynamisch initialisiert. Die Verwendung von CreateThread() verursacht keine Probleme mehr.

+1

Ja - wenn ein Thread mit 'CreateThread()' erstellt wird, wird 'strtok()' den pro-Thread-Datenblock zuweisen. Wenn der Thread jedoch beendet wird, wird dieser Block durchgelassen. Vielleicht keine große Sache, aber warum nicht einfach '_beginthreadex()' an erster Stelle? Für die neuen "paketierten Anwendungen" stellt '_beginthreadex()' (ab VS 2012) außerdem sicher, dass der MTA im neuen Thread initialisiert wird. Warum sollten sich Programmierer nicht die Angewohnheit machen, '_beginthreadex()' zu verwenden (was wirklich keinen Nachteil gegenüber der Verwendung von 'CreateThread()' hat - es hat sogar im Grunde die gleiche Signatur). –

+0

@Michael - überprüfen Sie den CRT-Quellcode, suchen Sie nach der Art und Weise, wie FlsAlloc() verwendet wird, um einen Rückruf zu installieren, um Speicher freizugeben. Die CRT in Threadpool-Threads nicht verwenden zu können, ist natürlich keine akzeptable Einschränkung. –

+0

Hans: Danke für die Info. –

Verwandte Themen