mt03线程的创建及运行.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
mt03线程的创建及运行

线程的创建和运行;第三章 线程的创建和运行;3.1 基本概念; Windows进程; 操作系统启动进程;线程的构成 线程的内核对象,操作系统用它来对线程实施管理 线程堆栈,用于维护线程在执行代码时候需要的所有函数局部变量。 线程上下文(一组CPU寄存器状态,特别是指令指针寄存器和堆栈指针寄存器) 指令寄存器和堆栈寄存器记录的地址都用于标志拥有线程的进程地址空间中的内存;线程和进程 进程比线程使用更多的系统资源,原因是它需要更多的地址空间。为进程创建一个虚拟地址空间,需要很多系统资源,同时,系统中要保留大量的记录,这也要占用大量的内存。 另外,dll或者exe需要加载到一个地址空间,也需要文件资源。 线程只需要一个内核对象和一个堆栈,保留的记录很少,因此需要很少的内存?? Windows中进程是不活泼的,进程从来不执行任何东西,进程只是线程的容器?? 应该用增加线程来解决编程问题,避免创建新的进程。; ;Windows线程的优先级 每个线程都会被赋予一个从0-31的优先级号码 只要是高优先级的线程是可以调度的,系统绝对不会调度低优先级的(Starvation) 系统引导的时候创建特殊的线程——0页线程,其优先级为0,当系统中没有任何其他线程运行时,0页线程负责将系统中所有的空闲RAM页面置0 进程内使用线程相对的优先级:空闲、最低、低于正常、正常、高于正常、最高、关键时间 进程也根据具体情况被分为5个进程优先级类:空闲、低于正常、正常、高于正常、实时 线程的实际优先级是进程优先级类和进程内线程相对优先级的组合 正常优先级类的进程的基本优先级是5, 进程内正常优先级线程的优先级是8,所以一个正常进程中的正常优先级线程的真正优先级是13;3.2 线程的创建;何时创建一个进程的主线程 线程用于描述进程中的运行路径。每当进程被初始化,系统就要创建一个主线程。该线程和C/C++运行库的启动代码一道开始运行,启动代码则调用进入点函数。并且继续运行直到进入点函数返回并且C/C++运行库的启动代码调用ExitProcess为止;线程进入点函数 每个线程必须有一个进入点函数,线程从这个进入点开始运行。 一个进程的主线程的进入点函数 main, wmain, WinMain, wWinMain 一个辅助线程的进入点函数:例如 DWORD WINAPI ThreadFunc(LPVOID pvParam) { DWORD dwResult= 0; ….. return dwResult. };CreateThread函数 在一个已经运行的线程中创建辅助线程 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全性,缺省NULL SIZE_T dwStackSize, // initial stack size,0表示和调用线程一样大小 LPTHREAD_START_ROUTINE lpStartAddress, // thread function LPVOID lpParameter, // thread argument,传递给线程的参数,NULL则不传参 DWORD dwCreationFlags, // creation option,用于确定线程创建后是否立即运行,0则立即运行 LPDWORD lpThreadId // [out] thread identifier,NULL则线程标识不返回 ); ;创建线程Win32例子程序 #include “windows.h” DWORD WINAPI ThreadFunc(void pParam) { //…. Do some function return 0; };Int main() { hThreadHandle= CreateThread( NULL, //使用默认的安全属性 0, // 堆栈大小,使用windows默认(1M) ThreadFunc, // 线程的入口函数名 (LPVOID)NULL, // 线程入口函数的参数 0, // 表示线程立刻执行 dwThreadID // 输出线程的ID ); dwRet= WaitForSingleObject(hThreadHandle, INFINITE ); // 等待线程退出 if ( dwRet== WAIT_OBJECT_0 ) { printf(“Work Thread Already Exits!\n”); } DeleteObject(hThreadHandle); // 释放内核对象资源 return 0; };创建线程MFC例子程序;创建线程AfxBeginThread; 创建线程_AfxThreadEntry

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档