_beginthreadex、CreateThread、AfxBeginThread的选择

来源:互联网 发布:备份软件购买 编辑:程序博客网 时间:2024/04/29 12:40

1.  Create/EndThread是Win32方法开始/结束一个线程

  _beginthreadx/_endthreadex是C RunTime方式开始/结束一个线程

  AfxBeginThread在MFC中开始/结束一个线程

2.直接在CreateThread API创建的线程中使用sprintf,malloc,strcat等涉及CRT存储堆操作的CRT库函数是很危险的,容易造成线程的意外中止。 在使用_beginthread和_beginthreadex创建的线程中可以安全的使用CRT函数。但是必须在线程结束的时候相应的调用_endthread或_endthreadex

3._beginthread成对调用的_endthread函数内部隐式的调用CloseHandle关闭了线程句柄,而与_beginthreadex成对使用的_endthreadex则没有关闭线程的句柄,需要显示的调用CloseHandle关闭线程句柄,不要使用_beginthread,使用._beginthreadex代替之。

4.尽量不要在一个MFC程序中使用_beginthreadex()或CreateThread()。

5.没有使用到MFC的线程尽量用_beginthreadex启动。

6.如果在一个与LIBCMT.LIB链接的程序中调用C Runtime函数,则必须要用_beginthreadex启动线程

7._beginthreadex启动的线程可以安全的调用任何C Runtime 函数