创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?
【参考1】CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 =========================================================
1、CreateThread——Windows的API函数
2、_beginthreadex——MS对C Runtime库的扩展SDK函数;
没有使用到MFC的线程尽量用_beginthreadex启动
3、AfxBeginThread——MFC中线程创建的MFC函数;
尽量不要在一个MFC程序中使用_beginthreadex()或CreateThread()
CreateThread
(API函数:SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用。)
提供操作系统级别的创建线程的操作,且
仅限于工作者线程
。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易。在使用的过程中要考虑到进程的同步与互斥的关系(防止死锁)。
线程函数定义为:DWORD WINAPI _yourThreadFun(LPVOID pParameter)。
但它没有考虑:
(1)C Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常(典型的例子是strtok函数)。
(2)MFC也需要知道新线程的创建,也需要做一些初始化工作(当然,如果没用MFC就没事了)。
_beginthreadex
MS对C Runtime库的扩展SDK函数,首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常。然后,调用CreateThread真正创建线程。 仅使用Runtime Library时,可以用_BegingThread。
AfxBeginThread
MFC中线程创建的MFC函数,首先创建了相应的CWinThread对象,然后调用CWinThread::CreateThread, 在CWinThread::CreateThread中,完成了对线程对象的初始化工作,然后,调用_beginthreadex(AfxBeginThread相比较更为安全)创建线程。它简化了操作或让线程能够响应消息,即可用于界面线程,也可以用于工作者线程,
但要注意不要在一个MFC程序中使用_beginthreadex()或CreateThread()。
线程函数定义为:UINT _y