Creatthread _Beginthread _Beginthreadex

  • Post author:
  • Post category:其他


在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是

C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局

量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全

的问题。而 _beginthreadex 为这些全局变量做了处理,使得每个线程都有一份独立

的“全局”量。

所以,如果你的编程只调用 Win32 API/SDK ,就放心用 CreateThread;如果要用到

C++ 运行时间库,那么就要使用 _beginthreadex ,并且需要在编译环境中选择 Use

MultiThread Lib/DLL。

C++ 运行期库有两个创建线程的函数,另一个是 _beginthread, 它们两者的区别请

自己去看MSDN:

通常他们的解释都是这容易造成内存泄漏。这个解释本身是没有错的,但是解释得不够完全和详 细。以至于造成很多新手盲目的信任了那句话,在那里都是用_beginthreadex函数,或者是装作没有看到使用CreateThread函数。曾经 有一段时间我也对这个问题很是困惑,不知道到底用那个才是对的。因为我不止一次在很多权威性的代码中看到对CreateThread函数的直接调用。难道 是权威错了?? 抱着怀疑的态度查找了大量的资料和书籍,终于搞明白了这个问题的关键所在,在此做个说明,算是对那句话的一个完善。

关于_beginthreadex和CreateThread的区别我就不做说明了,这个很 容易找到的。我们只要知道一个问题:_beginthreade



版权声明:本文为denglin_123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。