谈到Handle的问题,_beginthread的对应函数_endthread自动的调用了CloseHandle,而_beginthreadex的对应函数_endthreadex则没有,所以CloseHandle无论如何都是要调用的不过_endthread可以帮你执行自己不必写,其他两种就需要自己写!(Jeffrey
在Windows下面,比较常见的多线程创建函数是CreateThread(Windows自带的)和_beginthread、_beginthreadex(C运行库的)。
强烈推荐只用_beginthreadex,参数上面与CreateThread基本一样,比CreateThread好的就是,它给每个线程维护一个tiddata数据块,这对于多线程环境非常重要。《Windows核心编程》里也是这么说的。
用_beginthreadex还有个好处是,线程结束后,不会自己执行CloseHandle函数,这样的话,对于WaitFor系列函数的调用就比较方便了。_beginthread在线程结束的时候是会自己CloseHandle。
//////////////////////////
_beginthread()存在几个缺陷如下:
1
2
///////////////////////////////////
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. Terminating a thread with a call to endthread or _endthreadex helps to ensure proper recovery of resources allocated for the thread.