这两天刚好手头有点事情跟线程相关, 刚好细细拜读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
.aspx
2. <Win32多线程程序设计>
3. <windows核心编程>. 6章.
4. oRbIt 的专栏. <CreateThread()和_beginthreadex()区别>.
.aspx
向远处看的专栏. <CreateThread()和_beginthreadex()区别>
.aspx
搞不清谁的原创了….两位大仙都写原创…那…那肯定有个是引用的啊…要不难道是异灵事件?
5. kind_li的专栏 kind_li 线程知识点.
.aspx
6. 运行时: 管理进程和线程
.html
7. MSDN, _beginthreadex()跟_beginthread()的区别.
(VS.71).aspx本文发布于:2024-01-28 15:41:47,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064277108473.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |