CreateThread和_beginthread,内存泄漏为何因.pdf

CreateThread和_beginthread,内存泄漏为何因.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CreateThread _beginthread,内存泄漏为何因 作者: 卓然 日期:2011 年11 月14 日 20:10 分类:C/C++ 标签: C++ 内存泄漏_beginthreadex CreateThread 来自/post/101 在写c++代码时 ,一直牢记着一句话 :决不应该调用CreateThread。相反 ,应该使用Visual C++运行 期库函数_beginthreadex。 好像CreateThread 函数就是老虎,既然这样为什么微软要开发这个函数呢? 从网上找到的相关资料,现在汇总一下,在此对相关人员进行感谢! 摘自《windows 核心编程》: CreateThread 函数是用来创建线程的Windows 函数。不过 ,如果你正在编写C/C++代码 ,决不应该 调用CreateThread。相反 ,应该使用Visual C++运行期库函数_beginthreadex。如果不使用 Microsoft 的Visual C++编译器,你的编译器供应商有它自己的CreateThred 代函数。 若要使多线程C 和C++程序能够正确地运行,必须创建一个数据结构 ,并将它与使用C/C++运行期库 函数的每个线程关联起来。当你调用C/C++运行期库时 ,这些函数必须知道查看调用线程的数据块 ,这样 就不会对别的线程产生不良影响。 1.每个线程均获得由C/C++运行期库的堆栈分配的自己的tiddata 内存结构。 2.传递给_beginthreadex 的线程函数的地址保存 tiddata 内存块中。传递给该函数的参数也保存在该 数据块中。 3._beginthreadex 确实从内部调用CreateThread ,因为这是操作系统了解如何创建新线程的唯一方 法。 4.当调用CreatetThread 时 ,它被告知通过调用_threadstartex 而不是pfnStartAddr 来启动执行新线 程。 还有,传递给线程函数的参数是tiddata 结构而不是pvParam 的地址。 5.如果一切顺利 ,就会像CreateThread 那样返回线程句柄。如果任何操作失败了 ,便返回 NULL。 _beginthreadex 和_beginthread 函数的区别。_beginthread 函数的参数比较少 ,因此比特性全面的 _beginthreadex 函数受到更大的限制。 例如 ,如果使用_beginthread ,就无法创建带有安全属性的新线程,无法创建暂停的线程,也无法获得 线程的ID 值。 下面摘录Csdn 中的Holly ()的帖子进行解释 ,再次表示感谢。 来源 :[url]/t10/31810.html[/url] Holly (): oldworm 提供了很好的使用的例子 ,而且也运用了编译控制 ! 我来解释一下理论上的区别 : CreateThread、_beginthread 和_beginthreadex 都是用来启动线程的,但大家看到oldworm 没有提 供_beginthread 的方式 ,原因简单 ,_beginthread 是_beginthreadex 的功能子集 ,虽然_beginthread 内部是调用_beginthreadex 但他屏蔽了象安全特性这样的功能 ,所以_beginthread 与CreateThread 不 是同等级别 ,_beginthreadex 和CreateThread 功能上完全可 代,我们就来比较一下_beginthreadex 与CreateThread! CRT 的函数库在线程出现之前就已经存在,所以原有的CRT 不能真正支持线程 ,这导致我们在编程的时 候有了CRT 库的选择 , MSDN 中查阅CRT 的函数时都有: Libraries LIBC.LIB Single thread static library, retail version LIBCMT.LIB Multithread static library, retail version MSVCRT.LIB Import library for MSVCRT.DLL, retail version 这样的提示 ! 对于线程的支持是后来的事 ! 这也导致了许多CRT 的函数 多线程的情况下必须有特殊的支持 ,不能简单的使用CreateThread 就 OK。 大多的CRT 函数都可以

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档