windows系统中常用哪些函数来创建线程,有哪些?
创建线程,AfxBeginThread,_beginthread,_beginthreadex .
两者的区别在于使用的场景不同。
CreateThread是Windows的一个API函数(SDK函数的标准形式,一种直截了当的创建方法,可以在任何场合使用),它提供了在操作系统级别创建线程的操作,并且仅限于工作线程。不调用MFC和RTL的函数时,可以用CreateThread,否则不要轻易。在使用过程中要考虑进程的同步和互斥的关系(防止死锁)。线程函数被定义为DWORD。
WINAPI
_yourThreadFun(LPVOID
参数).但是它不考虑:
(1)C
多线程需要在运行时进行记录和初始化,以保证C函数库正常工作(典型的例子就是strtok函数)。
(2)MFC还需要知道新线程的创建,做一些初始化工作(当然不用MFC也行)。
AfxBeginThread:MFC线程创建的MFC函数。首先创建相应的CWinThread对象,然后调用CWinThread::CreateThread。
CWinThread::CreateThread中,线程对象初始化完成,然后调用_beginthreadex(AfxBeginThread更安全)创建线程。它简化了操作或使线程能够响应消息,可用于接口线程和工作线程,但注意不要在MFC程序中使用_beginthreadex()或CreateThread()。线程函数定义为:UINT。
_yourThreadFun(LPVOID
pParam)
_ beginthreadex: ms对c
运行时库的扩展SDK函数,首先针对c。
运行时库已经做了一些初始化工作,以确保c。
运行时库工作正常。然后,调用CreateThread来实际创建线程。
仅使用运行时。
库,可以使用_BegingThread。
部分:
其实这三个函数之间是有一定的调用关系的。第一个更纯粹,后两个完成相应的工作后,调用前者创建线程。其中CreateThread是操作系统提供的接口,AfxBeginThread和_BeginThread是编译器对它的封装。
使用_beginthreadex()和_endthreadex函数应该是最好的选择,而且都是c。
运行时间
库中的函数,其参数和数据类型都是c。
运行时间
类型,所以在启动线程时,不需要做Windows数据类型和c。
运行时间
库中数据类型之间的转换,从而减少线程启动时的资源消耗和时间消耗。但是用_beginthread,你不能创建一个有安全属性的新线程,不能创建一个挂起的线程,也不能获取。
线程ID _endthread的情况类似,它不带参数,也就是说这个线程的退出代码必须硬编码为0。
MFC也是C++类库(只是微软的C++类库,不是标准的C++类库),new和delete的操作符也封装在MFC中,所以在使用new和delete的地方不需要使用_beginthreadex()。
函数,可以使用另外两个函数。
记住这一点,你就知道什么时候创建一个线程用什么函数了。