- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程编程技术详解-第一讲
第一节:进程 进程的概念 进程是指在系统中正在运行的一个应用程序,在传统的操作系统中,是资源的分配单位又是高度运行的单位。在现 代操作系统中,进程是资源的分配单位,一个进程通常定义为程序的一个实例。在32位Windows中,进程占据4GB 2的 32次方)的虚拟地址空间。 第一节:进程 进程的组成部分 进程由两个部分组成: 操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方 地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间 第一节:进程 进程是不活泼的 进程从来不执行任何东西,它只是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。 第一节:进程 进程中的线程 单个进程可能包含若干个线程,这些线程都“同时” 执行进程地址空间中的代码。 每个进程至少拥有一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程 的第一个线程,称为主线程。此后,该线程可以创建其他的线程 第二节:线程 线程的概念 线程是指进程中执行运行的最小单位,即处理机调度的基本单位。和进程相比,进程是一项任务,线程是独立子任务,可由不同处理器分别来完成,提高了进程运行速度。 线程的组成部分 线程由两部分组成: a 线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 b 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量 第二节:线程 线程的概念 线程是指进程中执行运行的最小单位,即处理机调度的基本单位。和进程相比,进程是一项任务,线程是独立子任务,可由不同处理器分别来完成,提高了进程运行速度。 线程的组成部分 线程由两部分组成: a 线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 b 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量 第二节:线程 何时创建线程 线程示例 比如: 1)电子表格软件可以在后台执行重新计算。 2)Web浏览器可以在后台与其服务器进行通信。在当前的结果显示出来之前,用户可以调整浏览器窗口的大小,或者转到其他网站)。 3)可以使用操作系统附带的磁盘碎片整理程序,它是在系统空闲的时候,在后台运行这个实用程序并进行磁盘碎片整理 第二节:线程 何时不应该创建线程 线程示例 比如: 1)开发一个字处理程序,并且希望允许打印函数在它自己的线程中运行 第三节:线程的创建 CreateThread HANDLE CreateThread LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ; lpThreadAttributes 指向SECURITY_ATTRIBUTES型态的结构的指针,这个参数通常设置为NULL dwStackSize 设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小 第三节:线程的创建 CreateThread lpStartAddress, 指向线程函数的指针,函数名称没有限制,但是必须以下列形式声明: DWORD WINAPI ThreadProc LPVOID lpParam ,格式不正确将无法调用成功 lpParameter, 向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL dwCreationFlags, 线程标志,可取值如下 (1)CREATE_SUSPENDED 0:创建一个挂起的线程, (2)0:表示创建后立即激活。 lpThreadId lpThreadId:保存新线程的id。 第三节:线程的创建 注意事项 如果你不需要线程ID,lpThreadId参数可以被设为NULL,但这只在WindowsNT中才行得通,Windows95中就不行 。如果你要写一个程序可以在Windows 95中运行,不要把lpThreadId参数设为NULL。 调用CreateThread时,系统会创建一个线程内核对象,这个线程内核对象不是线程本身,而是一个较小的数据结构,操 作系统用这个结构来管理线程,可以把线程内核对象想象为一个由线程统计信息构成的小型数据结构。
文档评论(0)