Windows线程生灭

Windows线程生灭

ID:43104626

大小:126.08 KB

页数:15页

时间:2019-09-26

Windows线程生灭_第1页
Windows线程生灭_第2页
Windows线程生灭_第3页
Windows线程生灭_第4页
Windows线程生灭_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。