用哪个创建线程CreateThread还是_beginthread也许很多人说,这还用说,用_beginthread啊。很多人都这样说,很多书也这样写。不过我觉得还是得具体问题具体分析。
我会看情况来使用CreateThread或_beginthread
如果我不使用那几个CRT函数的话。我会用CreateThread来创建我的线程。
理由:
1. _beginthreadex函数只存在于C/C + +运行期库的多线程版本中。
2. 调用CreateThread 更简单一些,不像_beginthreadex要对参数做一些转换。
HANDLE hThead = (HANDLE)_beginthreadex(NULL, 0, (PTHREAD_START)Thead, NULL, 0, (unsigned*)&dwTheadID);
3. 更直接一些,_beginthreadex最后也是调用CreateThread的。
4. _beginthreadex为分配tiddata带来的开销。(虽然这开销很小)
如果要用那几个CRT函数,不得不用_beginthreadex,我们可以为它定义一个宏。使用起方便一些。
#define BEGINTHREADEX(psa,
cbStack, pfnStartAddr,
\
pvParam, fdwCreate,
pdwThreadId)
\
((HANDLE)_beginthreadex(
\
(void *) (psa),
\
(unsigned) (cbStack),
\
(PTHREAD_START) (pfnStartAddr),
\
(void *) (pvParam),
\
(unsigned) (fdwCreate),
\
(unsigned *) (pdwThreadId)))