AfxBeginThread、CreateThread与_BegingThread的区别
CreateThread 是Win32 API的。
_beginThread() 是C Runtiming的。
关于window下面的多线程,我们有三个选择,分别是AfxBeginThread、CreateThread与_BegingThread,三个到底有什么区别呢?我们该用什么呢?
AfxBeginThread()是MFC的,它在里面调用的_beginthreadex(),它有自己的线程处理过程,只不过在它的线程处理过程中调用了用户传递的函数,
_beginThread()是C Runtiming的,它也有自己的线程处理过程,在它自己的线程处理过程调用了用户传递的函数,在win32中,它在里面调用了CreateThread()
CreateThread()是win32的,是真正创建一个线程的函数,它也有自己的线程处理过程,只不过这个处理过程调用了用户传递的函数,在这个线程处理过程中以ExitThread(userThreadProc())结束。这个线程处理过程放在kernel32.dll中,没有公开。
如果用MFC编程,不要用CreateThread,如果只是使用Runtime Library,用_BegingThread,总之,不要轻易使用CreateThread
这是因为在MFC和RTL中的函数有可能会用到些它们所封装的公用变量,也就是说AfxBeginThread和_BeginThread都有自己的启动代码是CreateThread所没有的。在用CreateThread所创建的线程中使用MFC的类和RTL函数就有可能出现问题
如果是用汇编编写win32程序并且在线程函数中也不调用MFC和RTL的函数,那用CreateThread就没问题,或者你虽然是用C写线程函数,但你很小心没调用RTL函数,也不会有问题。(孙鑫的VC++深入详解中就是这样的情况)
CreateThread是由操作系统提供的接口,而AfxBeginThread和_BeginThread则是编译器对它的封装 .