-用哪个创建线程CreateThread还是_beginthread
2011-08-26 13:27
435 查看
用哪个创建线程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)))
我会看情况来使用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)))
相关文章推荐
- windows笔记-用哪个创建线程CreateThread还是_beginthread
- 用哪个创建线程CreateThread还是_beginthread
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)
- 创建一个线程用哪个好?--CreateThread._beginthread.AfxBeginThread比较
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!
- CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别(1)
- Windows下创建线程的方法_beginThread和CreateThread
- _beginthread, CreateThread,Win32下线程调用函数族CRT方式好,还是SDK方式好。
- CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别
- CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别(1)
- 创建线程的方法【CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别】
- c#中Invoke使用方法(线程间操作无效: 从不是创建控件的线程访问它。那么创建它的线程是哪个线程?)
- _beginthread还是CreateThread
- _beginthread还是CreateThread
- 创建线程不要实用CreateThread
- CreateThread和AfxBeginThread创建线程实例
- _beginthread还是createThread
- VC获取子线程入口函数的退出码(分别由CreateThread,_beginthread,_beginthreadex与AfxbeginThread 创建的子线程 )