第02章 进程与线程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 进程与线程
2.1 进程与线程的基本概念 2.2 进程管理(Process类)
1
2.3 线程管理(Thread类)
2.4 线程同步与线程池
2.5 BackgroundWorker组件
2.1 进程与线程的基本概念
进程 正在执行的程序称为进程 进程是资源调度和分配的基本单位 内存 与进程相关的信息包括: 进程标志 与进程关联的文件名 执行的程序和数据,运行时间、在存储器中的位置 占用的内存容量等。
7
2.2.1 获取进程信息
写程序 – 检查qq进程是否启动 – 给出提示信息
检查一下计算机中QQ是否 正在运行?
2.2.1 获取进程信息
1、如何获取进程信息 (1)获取本地计算机的所有进程: Process[] myProcesses = Process.GetProcesses(); (2)获取本地计算机上指定名称的进程: Process[] myProcesses = Process.GetProcessesByName("进程名称"); 注意:(a)进程名称不带扩展名。 (b)可以是任何一个可执行文件 例如: Process[] myProcesses = Process.GetProcessesByName (“WindowApplication1");
17
2.2.2 进程管理(Process类)
文件名:KwMusic.EXE
路径:C:\Program Files\KWMUSIC\KwMusic.EXE
改程序 :启动音乐盒
让你的程序启动音乐盒!
注意:路径!
18
2.2.2 进程管理(Process类)
一些细节
仅文件名提示找不到?
(运行效果见下页图)
2.2.1 获取进程信息(续)
运行效果:
11
12
2.2.2 启动和停止进程
任务2描述:
项目类型:常用的数据库应用程序(上学期ADO.NET)
环境:
数据库:SQLServer2008 \Oracle 10g\ DB2 V9.5 开发语言: C# 部署实际项目时:
默认寻找路径:当前目录+环境变量PATH 加路径信息。自己的,建议用相对路径!
指定图形用户界面的打开方式。例如: myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
细节记不住?
看提示! 定位问题 断点调试!必杀技!
"远程进程名称",remoteMachineName);
程序举例【例2-1】
10
【例2-1】观察本机运行的所有进程,并显示进程相关的信息。 要求:
(1)用DataGridView显示所有进程信息
(2)鼠标单击DataGridView某处时,判断单击的是否为行 开头或者某个单元格,如果是,显示该行进程的详细信息
2
3
2.1 进程与线程的基本概念
线程 将一个进程划分为若干个独立的执行流,每一个执行 流均称为一个线程。 进程资源分配和调度的基本单位 线程是CPU调度和分配的基本单位,异步执行。 主线程:每个进程都有一个主线程。 辅助线程:除了主线程以外,还可以给一个进程分配 若干个子线程,从而达到多个任务并发执行的目的。 线程共享进程的资源 改程序 点击按钮后不断循环输出测试信息,程序失去响应? 利用辅助线程不断循环输出测试信息
JAVA >> C#
考虑查看远程主机信息 启动关闭远程主机进程?
考虑,Process类提供么? NO! 变通: 客户端 服务端 进程之间的通信
23
24
2.2 进程管理 -- 小结
-----------------------获取进程实例-------------------
GetProcessById方法:通过进程Id创建新的Process组件, 并将其与本地计算机上的进程资源关联。
2.3.1 前台线程与后台线程
2.3.2 线程基本操作 2.3.3 Volatile关键字
2.3.4 在一个线程中操作另一个线程的控件
28
2.3 线程管理(Thread类)
Thread类位于System.Threading命名空间下。 Thread类是用于创建和控制线程的,对线程的常用操作 有:启动、终止、合并xiancheng 和休眠等。 Thread类提供的常用属性 1. IsAlive属性:获取一个值,该值指示当前线程的执行 状态。如果此线程已启动并且尚未正常终止,则为true; 否则为false 2. IsBackground属性:获取或设置一个值,该值指示某 个线程是否为后台线程。是后台线程或即将成为后台线 程,则为true;否则为false 3. Priority属性:获取或设置一个值,该值指示线程的调 度优先级
19
2.2.2 进程管理(Process类)
改程序 -- 添加关闭部分处理
关闭本机所有记事本程序 是否提示保存信息? 还是强制关闭?
20
2.2.2 进程管理(Process类)
停止进程 --- 两种方法
CloseMainWindow + Close(释放资源): 有图形界面
Kill + WaitForExit(等待退出): 所有程序
2.2.2 进程管理(Process类)-- 重点
启动进程
(1)创建一个Process组件的实例,例如:
Process myProcess = new Process(); (2)设置其对应的StartInfo属性,指定要运行的应用程序 名以及传递的参数: myProcess.StartInfo.FileName = "文件名"; myProcess.StartInfo.Arguments = "参数"; (3)调用该实例的Start方法启动该进程。 myProcess.Start();
GetProcessById最多只有一个Process实例。
GetProcesses方法:获取本机上所有进程
GetProcessesByName方法:获取本机上特定名称的进 程
----------------------进程ID及进程名----------------- Id属性:获取关联进程的唯一标识符 ProcessName属性:获取该进程的名称,不包括路径和 扩展名
5
2.2 进程管理(Process类)
任务1:获取进程信息
2.2 进程管理(Process类)
1、Process类位于System.Diagnostics命名空间下。
6
2、对本机(本地计算机)
(1)可以启动、终止某个进程 (2)可以查看进程相关信息,如CPU利用率等 (3)可以查看进程工作状态 3、对远程计算机 (1)可以查看远程计算机相关信息 (2)无法直接启动、终止远程计算机 4、在一个程序中处理其他的程序(例如调用其他.exe文件、. dll文件、快捷方式等),实际上就是对进程进行管理。
2.2 进程管理 -- 小结
-----------------------获取及设置优先级---------------
25
BasePriority属性: 获取进程优先级(只读)
PriorityClass 属性:设置或更改进程优先级 -------------------进程其他信息-------------------
学习目标:通过Process类在程序中调用sql脚本
14
2.2.2 启动和停止进程
任务3:停止、启动进程、远程主机进程管理
15
2.百度文库.2 进程管理(Process类)
写程序 — 启动记事本 – 空白记事本 – 指定文件名
让你的程序打开一个 记事本文档吧!
试一下:Process类
16
需求:
将数据库表、存储过程、从开发环境 生产环境? 如何初始化数据?
13
2.2.2 启动和停止进程
任务2方案:
方法1:实验室建立好,拷贝数据库文件?
SqlServer 2008 可以 通用么?NO! 让用户命令行执行?你会,别人可以么?软件需求!
一般方法:执行sql脚本
(1)用ListView显示“记事本”进程信息。 (2)用Process类方法启动进程。 (3)终止进程时,把所有“记事本”进程全部终止。
22
项目应用2:调用sql脚本
public void ExecuteSqlFile(string strFileName)
{
Process SqlProcess = new Process(); SqlProcess.StartInfo.FileName = "osql.exe"; SqlProcess.StartInfo.Arguments ="-U sa -P sa123 -d mydb -i"+ strFileName; SqlProcess.StartInfo.WindowStyle= ProcessWindowStyle.Hidden; …..
SqlProcess.Start();
SqlProcess.WaitForExit(); SqlProcess.Close(); }
略读补充示例:ProcessOsql
参考资料:osql说明文档
23
项目应用3:远程主机进程管理
开发时间对比 JAVA VS C#
C#开发速度 >> JAVA
为什么不用C#? 跨平台性对比
26
2.2 进程管理 -- 小结
--------------------进程启动--------------------- Start方法:启动进程资源并将其与Process组件关联 StartInfo属性:获取或设置要传递给启动进程的文件名 以及启动参数 ---------------------进程终止--------------------- Kill方法:强制终止进程
MachineName属性:获取关联进程正在其上运行的计算 机的名称。
MainModule属性:获取关联进程的主模块
Modules属性:获取由关联进程加载的模块
TotalProcessorTime属性:获取进程的总的处理器时间 StartTime属性:获取关联进程启动的时间
WorkingSet64属性:为进程分配的物理内存量(字节数)
29
2.3 线程管理(Thread类)(续)
Thread类提供的常用方法
1. Start方法:启动线程 2. Join方法:将指定的线程合并到当前线程中,并阻止当
8
2.2.1 获取进程信息(续)
(3)获取远程计算机的所有进程:
9
Process[] myProcesses =
Process.GetProcesses (remoteMachineName); 例如: Process[] myProcesses = Process.GetProcesses ("192.168.0.1"); (4)获取远程计算机上指定名称的进程: Process[] myProcesses = Process.GetProcessesByName(
如何选择?CloseMainWindow VS Kill
有图像界面?先礼后兵
先尝试 CloseMainWindow 后尝试 Kill Kill方法
没有图形用户界面
注意:异常处理!
21
2.2.2 进程管理(Process类)
【例2-2】启动、停止和观察Notepad进程。
(StartStopProcess)要求:
Close方法:释放与此组件关联的所有资源
CloseMainWindow方法:关闭具有用户界面的进程。 HasExited属性:指示关联进程是否已终止
WaitForExit方法:设置等待关联进程退出的时间,并在 该段时间结束前或该进程退出前,阻止当前线程执行。
27
2.3 线程管理(Thread类)
4
2.1 进程与线程的基本概念
并发执行:
宏观上并行
微观上串行 异步执行 例如: 查毒软件进程在下载更新病毒库(A)的同时要进行杀毒(B) A----B-----A----B A B交替占用CPU, 由于时间非常短,所以对用户来说宏观 上感觉在下载和查毒同时进行。而实际执行为串行执行
2.1 进程与线程的基本概念 2.2 进程管理(Process类)
1
2.3 线程管理(Thread类)
2.4 线程同步与线程池
2.5 BackgroundWorker组件
2.1 进程与线程的基本概念
进程 正在执行的程序称为进程 进程是资源调度和分配的基本单位 内存 与进程相关的信息包括: 进程标志 与进程关联的文件名 执行的程序和数据,运行时间、在存储器中的位置 占用的内存容量等。
7
2.2.1 获取进程信息
写程序 – 检查qq进程是否启动 – 给出提示信息
检查一下计算机中QQ是否 正在运行?
2.2.1 获取进程信息
1、如何获取进程信息 (1)获取本地计算机的所有进程: Process[] myProcesses = Process.GetProcesses(); (2)获取本地计算机上指定名称的进程: Process[] myProcesses = Process.GetProcessesByName("进程名称"); 注意:(a)进程名称不带扩展名。 (b)可以是任何一个可执行文件 例如: Process[] myProcesses = Process.GetProcessesByName (“WindowApplication1");
17
2.2.2 进程管理(Process类)
文件名:KwMusic.EXE
路径:C:\Program Files\KWMUSIC\KwMusic.EXE
改程序 :启动音乐盒
让你的程序启动音乐盒!
注意:路径!
18
2.2.2 进程管理(Process类)
一些细节
仅文件名提示找不到?
(运行效果见下页图)
2.2.1 获取进程信息(续)
运行效果:
11
12
2.2.2 启动和停止进程
任务2描述:
项目类型:常用的数据库应用程序(上学期ADO.NET)
环境:
数据库:SQLServer2008 \Oracle 10g\ DB2 V9.5 开发语言: C# 部署实际项目时:
默认寻找路径:当前目录+环境变量PATH 加路径信息。自己的,建议用相对路径!
指定图形用户界面的打开方式。例如: myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
细节记不住?
看提示! 定位问题 断点调试!必杀技!
"远程进程名称",remoteMachineName);
程序举例【例2-1】
10
【例2-1】观察本机运行的所有进程,并显示进程相关的信息。 要求:
(1)用DataGridView显示所有进程信息
(2)鼠标单击DataGridView某处时,判断单击的是否为行 开头或者某个单元格,如果是,显示该行进程的详细信息
2
3
2.1 进程与线程的基本概念
线程 将一个进程划分为若干个独立的执行流,每一个执行 流均称为一个线程。 进程资源分配和调度的基本单位 线程是CPU调度和分配的基本单位,异步执行。 主线程:每个进程都有一个主线程。 辅助线程:除了主线程以外,还可以给一个进程分配 若干个子线程,从而达到多个任务并发执行的目的。 线程共享进程的资源 改程序 点击按钮后不断循环输出测试信息,程序失去响应? 利用辅助线程不断循环输出测试信息
JAVA >> C#
考虑查看远程主机信息 启动关闭远程主机进程?
考虑,Process类提供么? NO! 变通: 客户端 服务端 进程之间的通信
23
24
2.2 进程管理 -- 小结
-----------------------获取进程实例-------------------
GetProcessById方法:通过进程Id创建新的Process组件, 并将其与本地计算机上的进程资源关联。
2.3.1 前台线程与后台线程
2.3.2 线程基本操作 2.3.3 Volatile关键字
2.3.4 在一个线程中操作另一个线程的控件
28
2.3 线程管理(Thread类)
Thread类位于System.Threading命名空间下。 Thread类是用于创建和控制线程的,对线程的常用操作 有:启动、终止、合并xiancheng 和休眠等。 Thread类提供的常用属性 1. IsAlive属性:获取一个值,该值指示当前线程的执行 状态。如果此线程已启动并且尚未正常终止,则为true; 否则为false 2. IsBackground属性:获取或设置一个值,该值指示某 个线程是否为后台线程。是后台线程或即将成为后台线 程,则为true;否则为false 3. Priority属性:获取或设置一个值,该值指示线程的调 度优先级
19
2.2.2 进程管理(Process类)
改程序 -- 添加关闭部分处理
关闭本机所有记事本程序 是否提示保存信息? 还是强制关闭?
20
2.2.2 进程管理(Process类)
停止进程 --- 两种方法
CloseMainWindow + Close(释放资源): 有图形界面
Kill + WaitForExit(等待退出): 所有程序
2.2.2 进程管理(Process类)-- 重点
启动进程
(1)创建一个Process组件的实例,例如:
Process myProcess = new Process(); (2)设置其对应的StartInfo属性,指定要运行的应用程序 名以及传递的参数: myProcess.StartInfo.FileName = "文件名"; myProcess.StartInfo.Arguments = "参数"; (3)调用该实例的Start方法启动该进程。 myProcess.Start();
GetProcessById最多只有一个Process实例。
GetProcesses方法:获取本机上所有进程
GetProcessesByName方法:获取本机上特定名称的进 程
----------------------进程ID及进程名----------------- Id属性:获取关联进程的唯一标识符 ProcessName属性:获取该进程的名称,不包括路径和 扩展名
5
2.2 进程管理(Process类)
任务1:获取进程信息
2.2 进程管理(Process类)
1、Process类位于System.Diagnostics命名空间下。
6
2、对本机(本地计算机)
(1)可以启动、终止某个进程 (2)可以查看进程相关信息,如CPU利用率等 (3)可以查看进程工作状态 3、对远程计算机 (1)可以查看远程计算机相关信息 (2)无法直接启动、终止远程计算机 4、在一个程序中处理其他的程序(例如调用其他.exe文件、. dll文件、快捷方式等),实际上就是对进程进行管理。
2.2 进程管理 -- 小结
-----------------------获取及设置优先级---------------
25
BasePriority属性: 获取进程优先级(只读)
PriorityClass 属性:设置或更改进程优先级 -------------------进程其他信息-------------------
学习目标:通过Process类在程序中调用sql脚本
14
2.2.2 启动和停止进程
任务3:停止、启动进程、远程主机进程管理
15
2.百度文库.2 进程管理(Process类)
写程序 — 启动记事本 – 空白记事本 – 指定文件名
让你的程序打开一个 记事本文档吧!
试一下:Process类
16
需求:
将数据库表、存储过程、从开发环境 生产环境? 如何初始化数据?
13
2.2.2 启动和停止进程
任务2方案:
方法1:实验室建立好,拷贝数据库文件?
SqlServer 2008 可以 通用么?NO! 让用户命令行执行?你会,别人可以么?软件需求!
一般方法:执行sql脚本
(1)用ListView显示“记事本”进程信息。 (2)用Process类方法启动进程。 (3)终止进程时,把所有“记事本”进程全部终止。
22
项目应用2:调用sql脚本
public void ExecuteSqlFile(string strFileName)
{
Process SqlProcess = new Process(); SqlProcess.StartInfo.FileName = "osql.exe"; SqlProcess.StartInfo.Arguments ="-U sa -P sa123 -d mydb -i"+ strFileName; SqlProcess.StartInfo.WindowStyle= ProcessWindowStyle.Hidden; …..
SqlProcess.Start();
SqlProcess.WaitForExit(); SqlProcess.Close(); }
略读补充示例:ProcessOsql
参考资料:osql说明文档
23
项目应用3:远程主机进程管理
开发时间对比 JAVA VS C#
C#开发速度 >> JAVA
为什么不用C#? 跨平台性对比
26
2.2 进程管理 -- 小结
--------------------进程启动--------------------- Start方法:启动进程资源并将其与Process组件关联 StartInfo属性:获取或设置要传递给启动进程的文件名 以及启动参数 ---------------------进程终止--------------------- Kill方法:强制终止进程
MachineName属性:获取关联进程正在其上运行的计算 机的名称。
MainModule属性:获取关联进程的主模块
Modules属性:获取由关联进程加载的模块
TotalProcessorTime属性:获取进程的总的处理器时间 StartTime属性:获取关联进程启动的时间
WorkingSet64属性:为进程分配的物理内存量(字节数)
29
2.3 线程管理(Thread类)(续)
Thread类提供的常用方法
1. Start方法:启动线程 2. Join方法:将指定的线程合并到当前线程中,并阻止当
8
2.2.1 获取进程信息(续)
(3)获取远程计算机的所有进程:
9
Process[] myProcesses =
Process.GetProcesses (remoteMachineName); 例如: Process[] myProcesses = Process.GetProcesses ("192.168.0.1"); (4)获取远程计算机上指定名称的进程: Process[] myProcesses = Process.GetProcessesByName(
如何选择?CloseMainWindow VS Kill
有图像界面?先礼后兵
先尝试 CloseMainWindow 后尝试 Kill Kill方法
没有图形用户界面
注意:异常处理!
21
2.2.2 进程管理(Process类)
【例2-2】启动、停止和观察Notepad进程。
(StartStopProcess)要求:
Close方法:释放与此组件关联的所有资源
CloseMainWindow方法:关闭具有用户界面的进程。 HasExited属性:指示关联进程是否已终止
WaitForExit方法:设置等待关联进程退出的时间,并在 该段时间结束前或该进程退出前,阻止当前线程执行。
27
2.3 线程管理(Thread类)
4
2.1 进程与线程的基本概念
并发执行:
宏观上并行
微观上串行 异步执行 例如: 查毒软件进程在下载更新病毒库(A)的同时要进行杀毒(B) A----B-----A----B A B交替占用CPU, 由于时间非常短,所以对用户来说宏观 上感觉在下载和查毒同时进行。而实际执行为串行执行