请问一个线程创建的问题!

maoloverme1 2010-02-04 09:51:22
我有一个基于MFC的程序,在这个程序中,我用CreateThread创建了一些线程,在这些线程中有的用了new函数,有的用了一些c语言的函数(比如字符串操作的函数)。网上说这样创建线程会造成内存泄露,应该用函数_beginthreadex来创建线程。请问像我这样做(也就是用CreateThread而不是用_beginthreadex创建线程)是否会出现什么比较严重的问题?谢谢!
...全文
123 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
海子0011 2010-02-11
  • 打赏
  • 举报
回复
水平有限就使用beginthreadex。
magic7004 2010-02-11
  • 打赏
  • 举报
回复
搂住去看下 Programming Applications for Microsoft Windows
norsd 2010-02-10
  • 打赏
  • 举报
回复
_beginthreadex 之类的运行库函数, 最后还是调用了CreateThread这个系统api

但是,他们做了许多crt的初始化工作 , 特别是tls内存的处理,申请.

我们用到的许多crt函数都需要初始化.

比如 sprintfW ..... , 如果你强行直接CreateThread,遇到crt函数, crt函数内部会检查是否初始化,
然后...
WizardK 2010-02-09
  • 打赏
  • 举报
回复
引用楼主 maoloverme1 的回复:
我有一个基于MFC的程序,在这个程序中,我用CreateThread创建了一些线程,在这些线程中有的用了new函数,有的用了一些c语言的函数(比如字符串操作的函数)。网上说这样创建线程会造成内存泄露,应该用函数_beginthreadex来创建线程。请问像我这样做(也就是用CreateThread而不是用_beginthreadex创建线程)是否会出现什么比较严重的问题?谢谢!


不要凡事都希望API替你做,该考虑的流程最好自己添加
hlq83 2010-02-09
  • 打赏
  • 举报
回复
CreateThread winAPI不保证线程安全,_beginthreadex为VC++运行库函数,会保证线程安全(运行库需要用到的内存数据),比如tiddata内存结构。
sallan 2010-02-06
  • 打赏
  • 举报
回复
beginthreadex可以适合你
Normandie007 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 stjay 的回复:]
引用楼主 maoloverme1 的回复:
我有一个基于MFC的程序,在这个程序中,我用CreateThread创建了一些线程,在这些线程中有的用了new函数,有的用了一些c语言的函数(比如字符串操作的函数)。网上说这样创建线程会造成内存泄露,应该用函数_beginthreadex来创建线程。请问像我这样做(也就是用CreateThread而不是用_beginthreadex创建线程)是否会出现什么比较严重的问题?谢谢!


MSDN上都有说明CreateThread与_beginthreadex的区别啦
早期的c运行时库多数是非线程安全的,
_beginthreadex结束后会释放某些c函数运行时申请的资源
[/Quote]

赞同
glacierful 2010-02-04
  • 打赏
  • 举报
回复
如果水平有限还是参照7楼的方法为好。
stjay 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 maoloverme1 的回复:]
我有一个基于MFC的程序,在这个程序中,我用CreateThread创建了一些线程,在这些线程中有的用了new函数,有的用了一些c语言的函数(比如字符串操作的函数)。网上说这样创建线程会造成内存泄露,应该用函数_beginthreadex来创建线程。请问像我这样做(也就是用CreateThread而不是用_beginthreadex创建线程)是否会出现什么比较严重的问题?谢谢!
[/Quote]

MSDN上都有说明CreateThread与_beginthreadex的区别啦
早期的c运行时库多数是非线程安全的,
_beginthreadex结束后会释放某些c函数运行时申请的资源
stjay 2010-02-04
  • 打赏
  • 举报
回复
既然用MFC
怎么不用AfxBeginThread
hallowwar 2010-02-04
  • 打赏
  • 举报
回复
底层一点好。
Eleven 2010-02-04
  • 打赏
  • 举报
回复
MFC是非线程安全的,建议用_beginthreadex()来创建线程,参考Windows核心编程
vclongking 2010-02-04
  • 打赏
  • 举报
回复
主要是线程内部做了什么 内存泄露和接口没多大关系吧

注意资源的动态创建释放就行了
bragi523 2010-02-04
  • 打赏
  • 举报
回复
退出之前释放资源就好了
zhou1xp 2010-02-04
  • 打赏
  • 举报
回复
如过是CreateThread,你把它改为_beginthreadex好了,CreateThread是windows系统用来创建线程的,beginthreadex到最后还是会调用CreateThread
WizardK 2010-02-04
  • 打赏
  • 举报
回复
对开启线程而言,都是一样的,关键在于你的线程要有退出机制,而且退出时把申请的内存都释放掉。

15,471

社区成员

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

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