Windows编程-多任务编程

Windows编程-多任务编程

ID:43382071

大小:296.50 KB

页数:34页

时间:2019-10-08

Windows编程-多任务编程_第1页
Windows编程-多任务编程_第2页
Windows编程-多任务编程_第3页
Windows编程-多任务编程_第4页
Windows编程-多任务编程_第5页
资源描述:

《Windows编程-多任务编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、线程的创建和运行第三章线程的创建和运行3.1基本概念3.2线程的创建3.3终止线程3.4线程的暂停与回复3.5在类中使用线程3.1基本概念Windows进程进程的四种入口函数intWINAPIWindMain()

2、WinMainCRTStartup¨intWINAPIwWinMain()

3、wWindMainCRTStartup¨int__cdeclmain()

4、mainCRTStartup¨int__cdeclwMain()

5、wmainCRTStartup操作系统不直接调用入口函数,而是调用c/c++运行库的启动函数操作系

6、统启动进程检索指向新进程的完整命令行的指针检索指向新进程的环境变量的指针对C/C++运行期的全局变量初始化对C运行期内存单元分配函数(malloc和calloc)和其他的底层输出输入例程使用的内存堆进行初始化为所有全局和静态的C++对象调用构造函数线程的构成线程的内核对象,操作系统用它来对线程实施管理线程堆栈,用于维护线程在执行代码时候需要的所有函数局部变量。线程上下文(一组CPU寄存器状态,特别是指令指针寄存器和堆栈指针寄存器)指令寄存器和堆栈寄存器记录的地址都用于标志拥有线程的进程地址空间中的内存线程和进程进程比线程使

7、用更多的系统资源,原因是它需要更多的地址空间。为进程创建一个虚拟地址空间,需要很多系统资源,同时,系统中要保留大量的记录,这也要占用大量的内存。另外,dll或者exe需要加载到一个地址空间,也需要文件资源。线程只需要一个内核对象和一个堆栈,保留的记录很少,因此需要很少的内存?Windows中进程是不活泼的,进程从来不执行任何东西,进程只是线程的容器?应该用增加线程来解决编程问题,避免创建新的进程。Windows线程的调度抢占式操作系统必须使用某种算法来确定哪些线程应该在何时调度和运行多长时间Windows被称为抢占式多线程

8、操作系统,因为一个线程可以随时停止运行,然后另外一个线程进行调度。基于任务优先级的抢占式调度算法,同一优先级的任务遵循时间片轮转,并且遵循FIFO策略。每隔20ms左右,windows要查看当前所有的线程内核对象,在这些内核对象中,只有某些对象被视为可以调度的对象,Windows选择可调度线程内核对象中的一个,将他加载到CPU寄存器中,然后继续运行,当系统引导时,便可以加载CPU寄存器中的线程上下文,使线程运行。系统只调度可以调度的线程。实际情况是很多线程是不可调度的线程,比如一个暂停运行的线程(可以在创建线程的时候,直接

9、指定这个线程是暂停的。)比如一个正在等待某些事情发生的线程。CPU不给无事可作的线程分配CPU时间。Windows线程的优先级每个线程都会被赋予一个从0-31的优先级号码只要是高优先级的线程是可以调度的,系统绝对不会调度低优先级的(Starvation)系统引导的时候创建特殊的线程——0页线程,其优先级为0,当系统中没有任何其他线程运行时,0页线程负责将系统中所有的空闲RAM页面置0进程内使用线程相对的优先级:空闲、最低、低于正常、正常、高于正常、最高、关键时间进程也根据具体情况被分为5个进程优先级类:空闲、低于正常、正常

10、、高于正常、实时线程的实际优先级是进程优先级类和进程内线程相对优先级的组合正常优先级类的进程的基本优先级是5,进程内正常优先级线程的优先级是8,所以一个正常进程中的正常优先级线程的真正优先级是133.2线程的创建何时创建一个进程的主线程线程用于描述进程中的运行路径。每当进程被初始化,系统就要创建一个主线程。该线程和C/C++运行库的启动代码一道开始运行,启动代码则调用进入点函数。并且继续运行直到进入点函数返回并且C/C++运行库的启动代码调用ExitProcess为止线程进入点函数每个线程必须有一个进入点函数,线程从这个进

11、入点开始运行。一个进程的主线程的进入点函数main,wmain,WinMain,wWinMain一个辅助线程的进入点函数:例如DWORDWINAPIThreadFunc(LPVOIDpvParam){DWORDdwResult=0;…..returndwResult.}CreateThread函数在一个已经运行的线程中创建辅助线程HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,//安全性,缺省NULLSIZE_TdwStackSize,//initial

12、stacksize,0表示和调用线程一样大小LPTHREAD_START_ROUTINElpStartAddress,//threadfunctionLPVOIDlpParameter,//threadargument,传递给线程的参数,NULL则不传参DWORDdwCreationFlags,//cr

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

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

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