AfxBeginThread、CreateThread与_BegingThread的区别

AfxBeginThread 是MFC的。
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则是编译器对它的封装 .

posted @ 2022-03-12 22:05  xiaomodecnblogs  阅读(84)  评论(0编辑  收藏  举报