在《windows核心编程》第五版的148下面有个说明。
是这么说的:
终止线程运行的推荐方法是让他的线程函数返回。但是,如果使用本节描述的方法,务必注意 ExitThread 函数是用于“杀死”线程的 windows 函数。 如果要写 C/C++ 代码,就绝对不要调用 ExitThread。相反,应该使用 C++ 运行库函数 _endthreadex。如果使用的不是 Microsoft 的 C++ 编译器,那么编译器供应商应该提供他们自己的 ExitThread 替代函数。不管这个替代函数是什么,都必须使用它。本章稍后将具体解释 _endthreadex 的用途及其重要性。
C/C++代码不是windows程序? 或者说不是windows代码? C/C++代码是啥意思?

解决方案 »

  1.   

    就是说不要用系统提供的那个ExitThread,而是要用编译器提供的包装过的ExitThread
      

  2.   

    应该是考虑到移植性吧,ExitThread是API函数,_endthreadex是C++ 运行库函数
      

  3.   

    那本书已经说得很清楚了,请不要看了一半就问。
    因为C/C++运行库有某些特性比如errno这样的全局变量,如果用单纯的Windows线程API,会导致竞态,所以必须有额外的包装函数,专门分配和管理新的线程专属变量,防止不同线程公用同一个变量的情况。
    如果你完全不用C/C++标准库函数,比如fopen什么的,只使用Windows API的话,是没问题的,但是一般很难彻底保证,所以还是用_beginthreadex/_exitthreadex。
    比如用Delphi就可以直接用CreateThread,因为它没有C/C++那种运行库内部静态变量。