- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows程序设计之进程和线程
第八章 进程和线程 * * 进程是装入内存准备执行的程序。每个进程都有自己的私有虚拟地址空间。进程由代码,数据和该进程中的线程和其他的系统资源,例如文件,管道和同步对象组成。 线程是系统调度的基本实体。每个线程维护一组在等待调度处理时保存其上下文的的结构,包括寄存器、内核堆栈、线程环境块和在线程的进程地址空间中的用户堆栈。进程的所有线程共享虚拟地址空间并能访问全局变量和进程的系统资源。 Win32的进程和线程调度是抢占式的。过多的线程将会降低系统的效率。 对应用程序开发者来说,多任务的优点是能够建立使用不止一个进程的应用程序和不止一个执行线程的进程。例如可以有一个处理与用户交互的线程(鼠标和键盘输入),而其他的低优先权的线程执行进程中的其他任务,输入线程的高优先权视的应用程序对用户的响应比较快,而其他的线程保证处理器在输入间隙中能够得到有效的利用。 使用时机: 任何进程的任何线程都可以使用CreateThread和CreateProcess来建立新的线程或进程。应用程序为需要私有地址空间和私有资源的应用使用多进程,以保护他们不会受到其他线程操作的影响。 当应用程序有几个任务需要同时进行时,多线程比较有用。例如,打开不止一个窗口时应用程序可以用单独的线程执行各个窗口的工作。构造完成几个类似或完全一样的任务时多线程是一个方便的方法。 对于应用程序来说,在一个进程的线程中分配任务来实施多任务更为有效,而不是建立多进程: ?系统建立和执行线程比进程要快。因为线程的代码已经映射到进程的地址空间中,而进程的代码必须装入。 ?进程的所有线程共享同一地址空间并能访问进程的全局变量。这可以简化线程之间的通信。 ?进程的所有线程都能使用诸如文件和管道之类资源的打开句柄。 多于多进程和多线程,都要考虑代价和危险。系统要消耗进程和线程两者的结构内存,跟踪大量的线程也非常耗费cpu时间。用多线程访问同一资源,必须同步以避免冲突,不正确的同步将会导致死锁。 调度: 抢占式,每一优先等级的线程都有一个队列。选择最高优先级的线程执行。 调度优先权: 每一个线程都有一个调度优先权级。Windows系统设有4个优先权类。每个优先权类有5个优先权级。当线程创建时,具有与创建其的进程相同的优选权级。 CreateProcess允许父进程设定其子进程的优先权类。可以通过SetPriorityClass改变进程的优先权类,并用GetPriorityClass或的进程的当前优先权类。 每个线程具有基础优先级和动态优先级。动态优先级不能低于基础优先级。调度程序在线程发生重大情况时提高和降低线程的动态优先级以增强它的能力。 四个优先权类:IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS。 可以通过SetThreadPriority和GetThreadPriority来确定线程的优先权级。 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD DWORD dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, // thread argument DWORD dwCreationFlags, // creation option LPDWORD lpThreadId // thread identifier ); 挂起和恢复线程: DWORD ResumeThread( HANDLE hThread // handle to thread ); DWORD SuspendThread( HANDLE hThread // handle to thread ); 线程的同步: 同步对象:互斥量,信号灯和事件句柄 文件句柄 命名管道句柄 控制台输入输出缓冲器句柄 通信设备句柄 进程句柄 线程句柄 这些对象要么是有信号的,要么是无
文档评论(0)