ExitThread memory leaks?

I was looking up CreateThread in my Win32 documentation when I noticed a little paragraph at the bottom:

"A thread that uses functions from the 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."

Is this true? The "For example, see Creating Threads" link on the page leads to an example program that uses wsprintf in the thread. Kind of hypocritical.

If it's true, then does it mean that I have to implement copies of the CRT functions that I use?
LVL 1
TookHAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
NickRepinConnect With a Mentor Commented:
>>Is this true?

Yes

wsprintf() is a Windows API function, and not C run-time function, you mixed it up with sprintf() etc.

>>then does it mean that I have to implement copies of the CRT functions that I use?

Not at all, to create a thread use C run-time functions _beginthread() and _beginthread()
0
 
NickRepinCommented:
I meant to say _beginthread() and _beginthreadex(). The latter one is almost the same as CreateThread() with regard to the parameters.

The difference is that you can use any C function inside the thread. To terminate the "C" thread simply return or call _endthread() or _endthreadex().
0
 
TookHAuthor Commented:
I find this really disturbing! I've seen so many sample programs that use CreateThread and CRT functions. Does MFC's thread class use CreateThread or beginthread? How significant are the leaks?
0
 
NickRepinCommented:
>>Does MFC's thread class use CreateThread or beginthread?
Sure, beginthread. See "C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\THRDCORE.CPP"

>>How significant are the leaks?
Well, it is not disturbing at all to call beginthread instead of CreateThread. beginthread initializes some thread-related memory; with CreateThread some of RTL functions might work incorrectly or not work at all.
0
 
TookHAuthor Commented:
I suppose I should just get used to using beginthread, then. It makes me angry, though. What is the point of putting a function in a library if it causes bugs in 90% of the programs it's used in?

Are there events, critical sections, ect. for use with beginthread?
0
All Courses

From novice to tech pro — start learning today.