c网络应用编程进程与线程课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《c网络应用编程进程与线程课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 应用 编程 进程 线程 课件
- 资源描述:
-
1、2 2本章重点本章重点本章教学目的本章教学目的 通过对进程、线程基本知识以及通过对进程、线程基本知识以及BackGroundWork组件的组件的介绍,使学生对相关内容有一个感性认识。介绍,使学生对相关内容有一个感性认识。本章教学要求本章教学要求(1)掌握进程查看、启动、停止的基本方法;)掌握进程查看、启动、停止的基本方法;(2)掌握线程创建、启动、终止的基本方法;)掌握线程创建、启动、终止的基本方法;(3)掌握开辟多线程的基本方法;)掌握开辟多线程的基本方法;(4)掌握在一个线程中引用其他线程中的控件的方法;)掌握在一个线程中引用其他线程中的控件的方法;(5)了解其他内容。)了解其他内容。3
2、32.1 进程与线程的基本概念进程与线程的基本概念 进程进程 正在执行的程序称为进程。正在执行的程序称为进程。与进程相关的信息包括:进程标示(进程与进程相关的信息包括:进程标示(进程ID)、文件名、执)、文件名、执行的程序和数据,运行时间、在存储器中的位置、占用的内行的程序和数据,运行时间、在存储器中的位置、占用的内存容量等。存容量等。线程线程 将一个进程划分为若干个独立的执行流,每一个执行流均称将一个进程划分为若干个独立的执行流,每一个执行流均称为一个线程。为一个线程。(1)线程是)线程是CPU调度和分配的基本单位。调度和分配的基本单位。(2)每个进程都有一个主线程。)每个进程都有一个主线程
3、。(3)除了主线程以外,还可以给一个进程分配若干个子线程,)除了主线程以外,还可以给一个进程分配若干个子线程,从而达到多个任务并行执行的目的。从而达到多个任务并行执行的目的。4 42.2 进程管理(进程管理(Process类)类)1、Process类位于类位于System.Diagnostics命名空间下。命名空间下。2、对本机(也叫本地计算机)、对本机(也叫本地计算机)(1)可以启动、终止某个进程)可以启动、终止某个进程 (2)可以查看进程相关信息,如)可以查看进程相关信息,如CPU利用率等利用率等 (3)可以查看进程工作状态)可以查看进程工作状态3、对远程计算机、对远程计算机 (1)可以查
4、看远程计算机相关信息)可以查看远程计算机相关信息 (2)无法直接启动、终止远程计算机)无法直接启动、终止远程计算机4、在一个程序中处理其他的程序(例如调用其他、在一个程序中处理其他的程序(例如调用其他.exe文件、文件、快捷方式等),实际上就是对进程进行管理。快捷方式等),实际上就是对进程进行管理。5 52.2 进程管理(进程管理(Process类)类)Process类提供的静态方法类提供的静态方法6 62.2 进程管理(进程管理(Process类)类)5、Process类常用的属性和方法类常用的属性和方法-获取进程实例获取进程实例-uGetProcessById方法(静态方法):通过进程方法
5、(静态方法):通过进程Id创建创建新的新的Process组件,并将其与本地计算机上的进程资源组件,并将其与本地计算机上的进程资源关联。关联。GetProcessById最多只有一个最多只有一个Process实例。实例。uGetProcesses方法(静态方法):获取本机所有进程方法(静态方法):获取本机所有进程uGetProcessesByName方法(静态方法):获取本机方法(静态方法):获取本机上特定名称的进程上特定名称的进程-获取及设置优先级获取及设置优先级-uBasePriority属性属性:获取进程优先级(只读)获取进程优先级(只读)uPriorityClass 属性:设置或更改进程
6、优先级属性:设置或更改进程优先级7 72.2 进程管理(进程管理(Process类)类)-进程进程ID及进程名及进程名-uId属性:获取关联进程的属性:获取关联进程的唯一标识符唯一标识符uProcessName属性:获取该进程的名称,不包括路径和扩展名属性:获取该进程的名称,不包括路径和扩展名-进程其他信息进程其他信息-uMachineName属性:获取关联进程正在其上运行的计算机名称属性:获取关联进程正在其上运行的计算机名称uMainModule属性:获取关联进程的主模块属性:获取关联进程的主模块uModules属性:获取由关联进程加载的模块属性:获取由关联进程加载的模块uTotalProc
7、essorTime属性:获取进程的总的处理器时间属性:获取进程的总的处理器时间uStartTime属性:获取关联进程的启动时间属性:获取关联进程的启动时间uWorkingSet64属性:为进程分配的物理内存量(字节数)属性:为进程分配的物理内存量(字节数)8 81.2 Process类类-进程启动进程启动-uStart方法:启动进程资源并将其与方法:启动进程资源并将其与Process组件关联组件关联uStartInfo属性:获取或设置要传递给启动进程的文件属性:获取或设置要传递给启动进程的文件名以及启动参数名以及启动参数-进程终止进程终止-uKill方法:强制终止进程方法:强制终止进程uClo
8、seMainWindow方法:关闭具有用户界面的进程方法:关闭具有用户界面的进程uClose方法:释放与此组件关联的所有资源方法:释放与此组件关联的所有资源uHasExited属性:指示关联进程是否已终止属性:指示关联进程是否已终止uWaitForExit方法:设置等待关联进程退出的时间,并方法:设置等待关联进程退出的时间,并在该段时间结束前或该进程退出前,阻止当前线程执在该段时间结束前或该进程退出前,阻止当前线程执行。行。9 92.2.1 获取进程信息获取进程信息1、如何获取进程信息、如何获取进程信息(1)获取本地计算机的所有进程:)获取本地计算机的所有进程:Process myProces
9、ses=Process.GetProcesses();(2)获取本地计算机上指定名称的进程:)获取本地计算机上指定名称的进程:Process myProcesses=Process.GetProcessesByName(进程名称进程名称);注意:(注意:(a)进程名称不带扩展名。)进程名称不带扩展名。(b)可以是任何一个可执行文件)可以是任何一个可执行文件例如:例如:Process myProcesses=Process.GetProcessesByName(“WindowApplication1);10102.2.1 获取进程信息获取进程信息(续)(续)(3)获取远程计算机的所有进程:)获取
10、远程计算机的所有进程:Process myProcesses=Process.GetProcesses(remoteMachineName);例如:例如:Process myProcesses=(4)获取远程计算机上指定名称的进程:)获取远程计算机上指定名称的进程:Process myProcesses=Process.GetProcessesByName(远程进程名称远程进程名称,remoteMachineName);1111程序举例程序举例【例例2-1】【例例2-1】观察本机运行的所有进程,并显示进程相关的信观察本机运行的所有进程,并显示进程相关的信息。息。要求:要求:(1)用)用Data
11、GridView显示所有进程信息显示所有进程信息(2)鼠标单击)鼠标单击DataGridView某处时,判断单击的是否为某处时,判断单击的是否为行开头或者某个单元格,如果是,显示该行进程的详细行开头或者某个单元格,如果是,显示该行进程的详细信息信息 (运行效果见下页图)(运行效果见下页图)1212(续)(续)运行效果(运行效果(ProcessMonitor):):1313启动和停止进程启动和停止进程1.启动进程:启动进程:方法方法1:(1)创建一个)创建一个Process组件的实例,例如:组件的实例,例如:Process myProcess=new Process();(2)设置其对应的)设置
12、其对应的StartInfo属性,指定要运行的应用程序名以及传递属性,指定要运行的应用程序名以及传递的参数:的参数:文件名文件名;参数参数;如果该进程带有图形用户界面,也可以指定图形用户界面的打开如果该进程带有图形用户界面,也可以指定图形用户界面的打开方式。例如:方式。例如:(3)调用该实例的)调用该实例的Start方法启动该进程。方法启动该进程。方法方法2:直接调用直接调用Process类提供的静态方法启动进程。类提供的静态方法启动进程。1414启动和停止进程(续)启动和停止进程(续)2.停止进程停止进程 通过两种方法利用通过两种方法利用Process组件停止进程。组件停止进程。(1)如果进程
13、有图形用户界面,调用)如果进程有图形用户界面,调用CloseMainWindow方法。方法。(2)如果进程没有用户界面,调用进程的)如果进程没有用户界面,调用进程的Kill方法。方法。不论有没有图形用户界面,如果希望强行让其退出,在权不论有没有图形用户界面,如果希望强行让其退出,在权限允许的情况下,均可以调用限允许的情况下,均可以调用Kill方法终止该进程。方法终止该进程。1515程序举例程序举例【例例2-2】【例例2-2】启动、停止和观察启动、停止和观察Notepad进程。进程。(StartStopProcess)要求:)要求:(1)用)用ListView显示显示“记事本记事本”进程信息。进
14、程信息。(2)用)用Process类提供的静态方法启动进程。类提供的静态方法启动进程。(3)终止进程时,把所有)终止进程时,把所有“记事本记事本”进程全部终止。进程全部终止。1616项目中的应用:在程序中执行项目中的应用:在程序中执行sql文件文件说明:说明:osql.exe是是SQL Server提供的一个工具,可以利用该工提供的一个工具,可以利用该工具添加、删除数据库用户,修改用户登录密码,附加、分离具添加、删除数据库用户,修改用户登录密码,附加、分离数据库等。对于通过程序管理数据库很有用。数据库等。对于通过程序管理数据库很有用。public void ExecuteSqlFile(str
15、ing strFileName)Process SqlProcess=new Process();osql.exe;-U sa-P sa123-d mydb-i+strFileName;ProcessWindowStyle.Hidden;SqlProcess.Start();SqlProcess.WaitForExit();SqlProcess.Close();17172.3 线程管理(线程管理(Thread类)类)前台线程与后台线程前台线程与后台线程 线程基本操作线程基本操作 关键字关键字 在一个线程中操作另一个线程的控件在一个线程中操作另一个线程的控件18182.3 线程管理(线程管理(T
16、hread类)类)Thread类位于类位于System.Threading命名空间下。命名空间下。Thread类是用于创建和控制线程的类是用于创建和控制线程的,对线程的常用操作对线程的常用操作有:启动线程、终止线程、合并线程和让线程休眠等。有:启动线程、终止线程、合并线程和让线程休眠等。Thread类提供的常用属性类提供的常用属性u IsAlive属性属性:获取一个值,该值指示当前线程的执行:获取一个值,该值指示当前线程的执行状态。如果此线程已启动并且尚未正常终止,则为状态。如果此线程已启动并且尚未正常终止,则为true;否则为否则为falseu IsBackground属性:属性:获取或设置
17、一个值,该值指示某获取或设置一个值,该值指示某个线程是否为后台线程。是后台线程或即将成为后台线个线程是否为后台线程。是后台线程或即将成为后台线程,则为程,则为true;否则为;否则为false1.Priority属性:属性:获取或设置一个值,该值指示线程的调获取或设置一个值,该值指示线程的调度优先级度优先级19192.3 线程管理(线程管理(Thread类)(续)类)(续)Thread类提供的常用方法类提供的常用方法u Start方法方法:启动线程:启动线程u Join方法:方法:将指定的线程合并到当前线程中,并阻止当将指定的线程合并到当前线程中,并阻止当前线程执行,直到指定的线程终止或经过了
18、指定的时间为前线程执行,直到指定的线程终止或经过了指定的时间为止止u Sleep方法:方法:将当前线程阻止指定的毫秒数,零将当前线程阻止指定的毫秒数,零(0)表示应表示应挂起此线程以使其他等待线程能够执行挂起此线程以使其他等待线程能够执行1.Abort方法:方法:在调用此方法的线程上引发在调用此方法的线程上引发ThreadAbortException,以开始终止此线程的过程。调,以开始终止此线程的过程。调用此方法通常会终止线程用此方法通常会终止线程2020前台线程与后台线程前台线程与后台线程一个线程要么是后台线程要么是前台线程。一个线程要么是后台线程要么是前台线程。后台线程与前台线程类似,区别
19、是后台线程不会影响进后台线程与前台线程类似,区别是后台线程不会影响进程终止。属于某个进程的所有前台线程都终止后,公共程终止。属于某个进程的所有前台线程都终止后,公共语言运行库就会结束该进程,而且所有属于该进程的后语言运行库就会结束该进程,而且所有属于该进程的后台线程也都会立即停止,而不管后台工作是否完成。台线程也都会立即停止,而不管后台工作是否完成。利用利用Thread对象的对象的IsBackground属性,可以设置或判属性,可以设置或判断一个线程是后台线程还是前台线程。断一个线程是后台线程还是前台线程。通过将某个线程的通过将某个线程的IsBackground属性设置为属性设置为true,使
20、,使其变为后台线程。其变为后台线程。默认情况下,属于托管线程池的线程(即其默认情况下,属于托管线程池的线程(即其IsThreadPoolThread属性为属性为true的线程)都是后台线的线程)都是后台线程,通过创建并启动新的程,通过创建并启动新的Thread对象而生成的线程都是对象而生成的线程都是前台线程。前台线程。2121线程的基本操作线程的基本操作1.启动线程启动线程启动线程前,首先要创建一个线程。启动线程前,首先要创建一个线程。u 创建无参数线程的一般形式为:创建无参数线程的一般形式为:Thread t1=new Thread(线程名线程名);u 创建带参数线程的一般形式为(传递一个创
21、建带参数线程的一般形式为(传递一个Object类型的参数):类型的参数):Thread t2=new Thread(线程名线程名(Object obj);u 对于不止一个参数的情况,可以先将这些参数封装到一个类中,然后对于不止一个参数的情况,可以先将这些参数封装到一个类中,然后传递该类的实例,在线程中,再通过该实例访问相应的数据,从而达传递该类的实例,在线程中,再通过该实例访问相应的数据,从而达到启动线程时传递多个参数的目的。到启动线程时传递多个参数的目的。u 创建线程实例后,就可以调用创建线程实例后,就可以调用Start方法启动线程了。例如:方法启动线程了。例如:t1.Start();/不带
22、参数不带参数 t2.Start(“myClass”);/带参数带参数注意:注意:调用调用Start只是告诉系统启动该线程,但是系统并不一定会立即启动它。只是告诉系统启动该线程,但是系统并不一定会立即启动它。2222线程的基本操作线程的基本操作2.终止线程终止线程 两种方法:两种方法:事先设置一个布尔字段,在其他线程中通过修改该布尔量事先设置一个布尔字段,在其他线程中通过修改该布尔量的值作为传递给该线程是否需要终止的判断条件,而在该的值作为传递给该线程是否需要终止的判断条件,而在该线程中循环判断该布尔值,以确定是否退出线程,这是结线程中循环判断该布尔值,以确定是否退出线程,这是结束线程比较好的方
23、法,实际应用中一般使用这种方法。束线程比较好的方法,实际应用中一般使用这种方法。调用调用Thread类的类的Abort方法,该方法的最终效果是强行终方法,该方法的最终效果是强行终止线程。止线程。2323线程的基本操作线程的基本操作3.暂停线程暂停线程 在多线程应用程序中,有时候并不希望某一个线程继续执在多线程应用程序中,有时候并不希望某一个线程继续执行,而是希望该线程暂停一段时间,这样,行,而是希望该线程暂停一段时间,这样,CPU就会将其就会将其时间片中剩余的部分让给另一个线程。时间片中剩余的部分让给另一个线程。调用调用Thread类的类的Sleep方法可以实现这个功能。例如:方法可以实现这个
24、功能。例如:Thread.Sleep(1000);这条语句的功能是让当前线程暂停这条语句的功能是让当前线程暂停1000毫秒。毫秒。注意注意 Sleep方法是静态方法,暂停的是该语句所在的线程,而不方法是静态方法,暂停的是该语句所在的线程,而不是其他线程。是其他线程。2424线程的基本操作线程的基本操作4.合并线程合并线程 Join方法用于把指定的线程合并到当前线程中,从而使其方法用于把指定的线程合并到当前线程中,从而使其变为一个单个的线程。变为一个单个的线程。如果一个线程如果一个线程t1在执行的过程中需要等待另一个线程在执行的过程中需要等待另一个线程t2结束结束后才能继续执行,可以在后才能继续
25、执行,可以在t1的代码块中调用的代码块中调用t2的的join方法。方法。例如:例如:t2.Join();功能:功能:t1在执行到在执行到t2.Join()语句后,就处于暂停状态,直到语句后,就处于暂停状态,直到t2结束后才会继续执行。结束后才会继续执行。为了避免为了避免t1一直等待,可以在调用一直等待,可以在调用t2的的Join方法的时候指方法的时候指定一个暂停时间,例如:定一个暂停时间,例如:t2.Join(100);2525 volatile修饰符表示所声明的字段可以被多个并发执行的线修饰符表示所声明的字段可以被多个并发执行的线程修改。程修改。如果某个字段声明包含如果某个字段声明包含vol
展开阅读全文