1 / 65
文档名称:

第五章 多线程结构的网络编程 网络编程技术知识.ppt

格式:ppt   大小:2,072KB   页数:65页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第五章 多线程结构的网络编程 网络编程技术知识.ppt

上传人:坚持 2018/9/3 文件大小:2.02 MB

下载得到文件列表

第五章 多线程结构的网络编程 网络编程技术知识.ppt

文档介绍

文档介绍:2018/9/3
1
网络编程
南京理工大学计算机学院
主讲教师: 吕建勇
电子邮箱: lv_jy@
第五章多线程结构的网络编程
内容提要
1、创建线程
2、线程同步
3、多线程结构的网络编程技术
§ 创建线程
线程与进程
创建一个线程
线程的挂起和激活
线程的优先级
线程的生命期
§ 线程与进程
多任务操作系统能同时独立运行几个程序,对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程(Thread),线程提供了多任务处理的能力。用进程和线程的观点来进行程序设计是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。
通常,进程是应用程序的执行实例,每个进程都有私有的虚拟地址空间、代码、数据和其它系统资源。操作系统在创建进程时为其分配资源,在进程结束时回收资源。
线程是一个独立的执行流,是进程内部的一个独立的执行单元,相当于一个子程序。系统自动为每个进程生成一个主线程,然后由这个主线程生成额外的子线程。一个进程中的所有线程都在该进程的虚拟地址空间中,共享该进程的全局变量和系统资源。
§ 线程与进程
进程中的线程是并行执行的,系统为每个线程分配运行时间片(20毫秒左右)。在任何一个时刻,CPU只执行一个时间片内的线程,每个线程只有在分配的时间片内才有对CPU的控制权,多个时间片中的相应线程在CPU内轮流执行,所以看上去好象各个线程在计算机中是并行处理的。
操作系统是根据线程的优先级来安排CPU的时间,优先级高的线程优先运行,优先级低的线程则继续等待。
§ 创建一个线程
lpThreadAttributes:指向SECURITY_ATTRIBUTES结构的指针,该结构包含一个句柄继承标志和一个指向线程对象安全性描述结构的指针。如果传一个NULL,表示对象采取缺省安全属性。如果想让任一个子进程都可继承该线程对象句柄,必须指定一个SECURITY_ATTRIBUTES结构,其中bInheritHandle成员初始化为TRUE。
DwStackSize:表示线程所用堆栈地址空间的大小,0表示采用系统缺省值。堆栈位于进程空间内,当线程终止时,这些内存被释放。
LpStartAddress:新线程代码所在的内存地址,即为线程函数的地址。
LpParameter:该参数为传入线程函数的参数。
dwCreationFlags:该参数指定控制线程创建的附加标志,可以取两种值。如果该参数为0,线程就会立即开始执行,如果该参数为CREATE_SUSPENDED,则系统产生线程后,初始化CPU,准备好执行该线程函数中的第一条指令,但并不马上执行,而是挂起该线程。
lpThreadId:该参数是一个DWORD类型地址,返回赋给该新线程的ID值。
§ 线程的挂起与激活
在创建线程时可以指定线程的初始状态。线程的初始状态可以有执行和挂起两种状态。当线程的初始状态为挂起状态(通过传递CREATE_SUSPENDED标志给函数CreateThread来实现)时,系统创建指定线程的核心对象,创建线程的栈,并且为线程对象分配一个初始挂起计数值1,这表明了系统将不再分配CPU去执行线程。要开始执行一个线程,另一个线程必须调用ResumeThread函数并传递给它调用CreateThread时返回的线程句柄。
§ 线程的挂起与激活
(1)激活一个线程
ResumeThread函数用来激活一个线程。ResumeThread在执行时,首先检查线程的挂起次数,如果挂起次数为0表示该线程并非处于挂起状态,否则该线程的挂起次数值将被减1。
DWORD ResumeThread( HANDLE hThread );
其中参数hThread为被激活线程的句柄。
返回值为-1时表示函数调用失败。当函数调用成功时,返回值表示线程被激活前的挂起次数。如果返回值为0,表示该线程没有被挂起;如果返回值为1,表示该线程已由挂起状态变成执行状态;如果返回值大于1,表示该线程仍然处于挂起状态,但是挂起次数已经减1。
一个线程可以被挂起多次。如果一个线程被挂起3次, 则该线程在它被分配CPU之前必须被恢复3次。