先声明,本人经验尚浅,各位牛人大虾不要鄙视我。
大家都知道Windows下创建线程的API是CreateThread(),而在CRT中也给了经封装过的创建函数_beginthreadex()和_beginthread()。而在《Windows核心编程》和《深入浅出MFC》中都建议不要直接使用CreateThread(),而建议使用_beginthreadex(),这样可以保证每个线程里有各自独立的errno,使得Windows API能被安全的调用。但是自己在实际工作中,见到别人写的代码几乎无一例外是直接使用CreateThread()。所以想问一下经验丰富的大侠们,你们是怎么看待这个问题?并且你们在写代码过程中是怎么选择的?

解决方案 »

  1.   

    我不使用CreateThread()!一些严谨的程序也都是用_beginthreadex的。msdn上也建议不使用CreateThread()这就有足够的理由抛弃他了吧。
      

  2.   

    期待牛人回答
    自己也是看书上推荐使用_beginthreadex,但是自己写代码从来只用CreateThread(),习惯?或许吧
      

  3.   

    MFC下就用AfxBeginThread,Win32就用_beginthreadex
      

  4.   

    _beginthreadex 是对CRT里使用的“线程变量”进行了初始化工作。如果不用这个,而用CreateThread的话,那么某些CRT函数将不能被使用,比较著名的是strtok函数。
      

  5.   

    你看到应该是网上下的代码吧
    这类代码大部分是不用考虑运行后果的
    不过从严谨性考虑
    还是使用_beginthreadex更好些
      

  6.   

    个人觉得,当在mfc程序里面创建线程,主要就是不能在CreateThread里使用mfc,afxbeginthread就可以,其他没遇到过
      

  7.   

    同意楼上的,如果没什么特殊调用函数,就利用语言做一些基本处理,调CreateThread没有什么问题。
      

  8.   

    我会调用CreateThread() .因为C/C++ runtime library的_BeginThreadEx初始化的结构对我们的日常程序没有什么用.而且我可以保证我不会调用一些C++函数,它们会间接调用那个CRT结构.
      

  9.   

    CRT的某些函数会动态分配内存,然后把这块的内存的地址存到线程相关的环境块中.如果使用ExitThread,这块内存在线程结束时就不能正确释放掉.
      

  10.   

    看一下 _beginthreadex ,都怎么实现的,然后再创建线程的时候,一次调用,这样就不用调用_beginthreadex了-_-
      

  11.   

    弱弱的问一下,什么是CRT 是secureCRT 吗?
      

  12.   

    CRT是C runtime library  C语言运行时库实际上如果你可以保证不调用 C语言运行时库 就用 CreateThread(),如果不是就用 _beginthreadex()不过个人认为一般用不到 _beginthreadex()