预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://www.cnblogs.com/t427/archive/2012/11/17/2775372.html"Windows线程生灭(一) 一、线程创建 Windows线程在创建时会首先创建一个线程内核对象,它是一个较小的数据结构,操作系统通过它来管理线程。新线程可以访问进程内核对象的所有句柄、进程中的所有内存及同一进程中其它线程的栈。 创建有以下几种方式,分别说明 CreateThread(...)(操作系统提供的API,尽量不要使用) _beginthread(...) _beginthreadex(...) AfxBeginThread(...)(MFC提供的接口) 首先声明一个线程函数,原型为: DWORDFunThread(LPVOIDpParam); 1.CreateThread() 该函数为操作系统提供,原型如下: HANDLEWINAPICreateThread( _In_opt_LPSECURITY_ATTRIBUTESlpThreadAttributes, _In_SIZE_TdwStackSize, _In_LPTHREAD_START_ROUTINElpStartAddress, _In_opt_LPVOIDlpParameter, _In_DWORDdwCreationFlags, _Out_opt_LPDWORDlpThreadId ); 说明: HeaderLibraryDllWinBase.hKernel32.libKernel32.dll 参数: lpThreadAttributes:指向HYPERLINK"http://msdn.microsoft.com/en-us/library/aa379560(v=vs.85)"\t"_blank"SECURITY_ATTRIBUTES结构体的指针,记录线程的安全描述。决定子进程能否继承到返回的句柄,如果为NULL,则采用默认安全级别(THREAD_PRIORITY_NORMAL),同时返回句柄不能继承 dwStackSize:指定线程栈大小,当为0时,表示栈使用HYPERLINK"http://msdn.microsoft.com/en-us/library/ms686774(v=vs.85)"\t"_blank"默认大小 lpStartAddress:线程函数指针 lpParameter:线程函数参数 dwCreationFlags:为0:表示线程创建后立即运行;为CREATE_SUSPEND:创建后挂起,此时可修改线程属性,通过ResumeThread唤醒; lpThreadId:一个指向threadID的指针,若对线程ID关注,则传值,否则置NULL 返回值: 创建线程的句柄; 若创建失败,则返回NULL,可用GetLastError()捕获错误; MFC中也提供了CreateThread函数,它是CWinThread类的一个方法,如下 BOOLCreateThread( DWORDdwCreateFlags=0, UINTnStackSize=0, LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL ); 参数含义与返回值含义一致,它的调用方式是: CWinThreadthread1; thread1.CreateThread(); 需要说明的是dwCreateFlags传值为CREATE_SUSPEND时,要通过CWinThread::ResumeThread来唤醒 2._beginthread(),_beginthreadex() 原型: unsignedlong_beginthread( void(__cdecl*start_address)(void*), unsignedstack_size,void*arglist ); unsignedlong_beginthreadex( void*security, unsignedstack_size, unsigned(__stdcall*start_address)(void*), void*arglist, unsignedinitflag, unsigned*thrdaddr ); 说明: HeaderLibraryprocess.hLIBCMT.libMSVCRT.lib 参数与上面CreateThread含义相同,不在赘述; 二者比较: 1._beginthread中线程函数调用为_cdecl,且无返回值;_beginthreadex为_stdcall,有返回值; 2._beginthreadex中initflag相当于CreateThread中的dwCreationFlags,th