这两天刚好手头有点事情跟线程相关, 刚好细细拜读jjh先生所译的win32线程大作, 有点不知所云, 起码是被弄的一愣一愣的, 偏听则暗, 果然如此, 只知其然而不知所以然, 恐怕过两天还是会忘记的. 就当写写心得记录了.
1. 已知windows下可以用如下方法创建线程.
1) CreadThread(…). API
2) _beginthread(…). CRT
3) _beginthreadex(…). CRT
4) AfxBeginThread(…). MFC
由于AfxBeginThread()同学勾搭MFC, 扬言誓死不分, 开除先.
_beginthreadex()和_beginthread()长的很像, 没什么直接血缘关系, 但都是CRT所提供的线程创建方式. 显著区别在于参数和返回值上.
2. _beginthread(…)与_beginthreadex(…)区别.
1) 参数区别.
2) 返回值区别
_beginthread()返回-1表示失败, 而_beginthreadex()返回0表示失败
3) 实际过程区别.
3. _beginthreadex(…)与CreadThread(…)区别.
1) 参数区别.
两者参数基本相同, 只是CreadThread()的参数是windows定义的win32数据类型, 而_beginthreadex()是标准C/C++的数据类型. 需要注意的是, CreateThread()的第三个参数函数指针是unsign long的, 而_beginthreadex()的第三个参数函数指针是unsign int的.
2) 返回值区别.
CreateThread(), 返回的是创建的线程的HANDLE,
_beginthreadex(), 返回的一个是unsigned long. 需通过reinterpret_cast<HANDLE>或(HANDLE)来强制转换.
3) 实际过程区别.
的
一般不建议直接调用CreateThread(), 除非可以非常确定
4. 选择_beginthreadex()和CreateThread()的一般性规则.
不建议使用CreateThread(). 尤其当线程:
l 使用了malloc()/free(), new/delete的线程.
l 调用stdio.h或io.h中声明的任何函数.
l 使用浮点变量.
5. 为什么winCE上只能用CreateThread()?
我也不知道为什么….
参考文献:
1. MSJ(Mircsofts System Journal) July 1999
http://www.microsoft.com/msj/0799/Win32/Win320799.aspx
2. <Win32多线程程序设计>
3. <windows核心编程>. 6章.
4. oRbIt 的专栏. <CreateThread()和_beginthreadex()区别>.
http://blog.csdn.net/orbit/archive/2005/07/30/440118.aspx
向远处看的专栏. <CreateThread()和_beginthreadex()区别>
http://blog.csdn.net/xuxinshao/archive/2005/09/14/480797.aspx
搞不清谁的原创了….两位大仙都写原创…那…那肯定有个是引用的啊…要不难道是异灵事件?
5. kind_li的专栏 kind_li 线程知识点.
http://blog.csdn.net/kind_li/archive/2003/04/03/10998.aspx
6. 运行时: 管理进程和线程
http://www-128.ibm.com/developerworks/cn/linux/sdk/rt/part7/index.html
7. MSDN, _beginthreadex()跟_beginthread()的区别.
http://msdn2.microsoft.com/en-us/library/kdzttdcb(VS.71).aspx