资源描述:
《Windows线程生灭》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows线程生灭(一)一、线程创建Windows线程在创建时会首先创建一个线程内核对象,它是一个较小的数据结构,操作系统通过它来管理线程。新线程可以访问进程内核对象的所有句柄、进程中的所有内存及同一进程中其它线程的栈。创建有以下几种方式,分别说明1.CreateThread(...)(操作系统提供的API,尽量不要使用)2._beginthread(...)3._beginthreadex(...)4.AfxBeginThread(...)(MFC提供的接口)首先声明一个线程函数,原型为:DW
2、ORDFunThread(LPVOIDpParam);1.CreateThread()该函数为操作系统提供,原型如下:HANDLEWINAPICreateThread(_In_opt_LPSECURITY_ATTRIBUTESlpThreadAttributes,_In_SIZE_TdwStackSize,_In_LPTHREAD_START_ROUTINElpStartAddress,_In_opt_LPVOIDlpParameter,_In_DWORDdwCreationFlags,_Out_o
3、pt_LPDWORDlpThreadId);说明:HeaderLibraryDllWinBase.hKernel32.libKernel32.dll 参数: lpThreadAttributes:指向SECURITY_ATTRIBUTES结构体的指针,记录线程的安全描述。决定子进程能否继承到返回的句柄,如果为NULL,则采用默认安全级别(THREAD_PRIORITY_NORMAL),同时返回句柄不能继承 dwStackSize:指定线程栈大小,当为0时,表示栈使用默认大小 lpStartA
4、ddress:线程函数指针 lpParameter:线程函数参数 dwCreationFlags:为0:表示线程创建后立即运行;为CREATE_SUSPEND:创建后挂起,此时可修改线程属性,通过ResumeThread唤醒; lpThreadId:一个指向threadID的指针,若对线程ID关注,则传值,否则置NULL返回值: 创建线程的句柄; 若创建失败,则返回NULL,可用GetLastError()捕获错误;MFC中也提供了CreateThread函数,它是CWinThread类的
5、一个方法,如下BOOLCreateThread(DWORDdwCreateFlags=0,UINTnStackSize=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL);参数含义与返回值含义一致,它的调用方式是:CWinThreadthread1;thread1.CreateThread();需要说明的是dwCreateFlags传值为CREATE_SUSPEND时,要通过CWinThread::ResumeThread来唤醒2._beginthread(),
6、 _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
7、*thrdaddr);说明:HeaderLibraryprocess.hLIBCMT.lib MSVCRT.lib 参数与上面CreateThread含义相同,不在赘述;二者比较:1._beginthread中线程函数调用为_cdecl,且无返回值;_beginthreadex为_stdcall,有返回值;2._beginthreadex中initflag相当于CreateThread中的dwCreationFlags,thrdaddr相当于lpThreadId3.在实现上_beginthrea
8、dex控制了一个_tiddata的线程数据块,里面存放了线程函数地址、参数的很多属性,之后再间接调用CreateThread(...);4._beginthread则参数较少;3. AfxBeginThread()MFC提供的接口提供了二种不同类型线程的生成,即工作者线程和用户界面线程;可以简单理解用户界面线程包含用户界面,它有自己的消息队列,工作者线程用于计算等;CWinThread*AfxBeginThread(AFX_THREADPROCpfnThreadPro