CreateThread和_beginthread区别及使用
CreateThread 是一个Win 32API 函数,
_beginthread 是一个CRT(C Run-Time)函数,
他们都是实现多线城的创建的函数,而且他们拥有相同的使用方法,相同的参数列表。
CreateThread()和_beginthreadex()在Jeffrey的《Windows核心编程》中讲的很清楚,应当尽量避免使用CreateThread()。
事实上,_beginthreadex()在内部先为线程创建一个线程特有的tiddata结构,然后调用CreateThread()。在某些非线程安全的CRT函数中会请求这个结构。如果直接使用CreateThread()的话,那些函数发现请求的tiddata为NULL,就会在现场为该线程创建该结构,此后调用EndThread()时会引起内存泄漏。_endthreadex()可以释放由CreateThread()创建的线程,实际上,在它的内部会先释放由_beginthreadex()创建的tiddata结构,然后调用EndThread()。
因此,应当使用_beginthreadex()和_endthreadex(),而避免使用CreateThread()和EndThread()。当然,_beginthread()和_endthread()也是应当避免使用的。
避免使用_beginthread!
_beginthread函数在调用ExitThread之前,会调用CloseHandle,如果此时之后代码调用CloseHandle()则会失败,而_beginthreadex()不会关闭句柄,故而应当用_beginthreadex()。