IOCP只能用CreateThread?

蒙飞鸿 2010-03-23 08:55:57
有些忠告说多线程VC编程要用_beginThreadex()、AfxBeginThread()这样的函数来替代CreateThread(),可是在很多IOCP的例子里却都是使用后者。查了查这些函数的区别是运行期库,难道IOCP的时候就没有这个运行期库的问题了?
...全文
139 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒙飞鸿 2010-04-27
  • 打赏
  • 举报
回复
哦,原来_beginthreadex和CreateThread的参数列表几乎是一样的,可以用前者顶替后者。至于选哪个呢,仍期待更详尽解读。
LiuYinChina 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 stjay 的回复:]
CreateThread占用资源最小
相应地,线程函数里最好不要用库函数,可用对应的API代替
既然用IOCP,那么就尽量用API
[/Quote]

用API
cpp_crab 2010-03-23
  • 打赏
  • 举报
回复

_beginthreadex和CreateThread的问题一直没太在意,今天Google了一下,发现一个旧帖或许可以解决楼主的困惑…

http://topic.csdn.net/t/20000926/10/31810.html

不过我想在VS2005后的编译器,使用是微软公司对C/C++扩展的安全CRT(C Runtime Library = C运行时间库)函数,或许可以解决资源泄露的问题
蒙飞鸿 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dengsf 的回复:]
问题存在,
写例子的人没注意而已。
用CreateThread,仅在使用了运行库跟全局变量相关的函数,
且线程退出后才会造成内存泄露,
具体见MSDN。
少量泄露对一般软件影响不大。
[/Quote]
大吞吐服务器,不考虑不行啊。。
蒙飞鸿 2010-03-23
  • 打赏
  • 举报
回复
不过貌似只有CREATETHREAD的参数里有IO端口,其他函数不接受这个参数,不用不行的样子。。。
dengsf 2010-03-23
  • 打赏
  • 举报
回复
问题存在,
写例子的人没注意而已。
用CreateThread,仅在使用了运行库跟全局变量相关的函数,
且线程退出后才会造成内存泄露,
具体见MSDN。
少量泄露对一般软件影响不大。
Vector_fz 2010-03-23
  • 打赏
  • 举报
回复
都是创建线程,区别应当不大吧
如果担心运行库的问题,可以全静态链接
stjay 2010-03-23
  • 打赏
  • 举报
回复
CreateThread占用资源最小
相应地,线程函数里最好不要用库函数,可用对应的API代替
既然用IOCP,那么就尽量用API
visualassist4680 2010-03-23
  • 打赏
  • 举报
回复
createthread 和 _beginThreadex 的区别不是运行效率,beginThreadex 最终调用的也是 createthread, beginthreadex 在调用 createthread 之前做了很多初始化的东西,这些初始化的东西是为了初始化运行时库的变量和空间,这样在你的线程里就可以使用 运行时库的api 例如 strlen wcscpy 之类的,如果你的线程没有使用运行时库,就可以不使用 beginthreadex,但是为了避免有人用了运行时库的api,最后所有的线程创建都用 beginthread(ex)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧