小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程ID),使用两次,得到两个进程句柄。实验目的:这两个进程句柄都能控制这个进程吗?通过该试验加深对句柄的理解!!...

小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程ID),使用两次,得到两个进程句柄。实验目的:这两个进程句柄都能控制这个进程吗?

.版本 2

.程序集 窗口程序集1

.子程序 __启动窗口_创建完毕

模块注册 ()
_启动窗口.标题 = “自进程ID=” + 到文本 (取自进程ID ()) + “ 主线程ID=” + 到文本 (取进程主线程 (-1))

.子程序 _按钮1_被单击
.局部变量 进程信息, 进程信息
.局部变量 进程句柄1, 整数型
.局部变量 进程句柄2, 整数型

编辑框2.内容 = “”
编辑框1.内容 = 扩展路径 (编辑框1.内容)

' 运行()  进程_运行程序 () 创建进程()  进程_创建进程()
' 创建进程的参数一为 程序文件的完整路径 支持命令行方式
' 参数二可以指定新进程的运行目录,不然新进程将继承我们进程的目录作为运行目录
.如果真 (创建进程 (编辑框1.内容, , , , 进程信息))
    编辑框2.加入文本 (“进程信息.进程ID=” + 到文本 (进程信息.进程ID) + #换行符)
    编辑框2.加入文本 (“进程信息.线程ID=” + 到文本 (进程信息.线程ID) + #换行符)
    编辑框2.加入文本 (“进程信息.进程句柄=” + 到文本 (进程信息.进程句柄) + #换行符)
    编辑框2.加入文本 (“进程信息.线程句柄=” + 到文本 (进程信息.线程句柄) + #换行符)

    ' 若不填 进程信息 则不会得到进程与线程的ID和句柄,当然也不必再写关闭句柄
    ' 填了 进程信息 这个参数就会得到进程句柄与线程句柄,若后继需要用到,可以保存到程序集或全局变量里

    关闭句柄 (进程信息.进程句柄)  ' 当不再使用这些句柄了要及时关闭掉
    关闭句柄 (进程信息.线程句柄)  ' 当不再使用这些句柄了要及时关闭掉
.如果真结束

进程句柄1 = 打开进程 (进程信息.进程ID)
信息框 (到文本 (进程句柄1), 0, )
进程句柄2 = 打开进程 (进程信息.进程ID)
信息框 (到文本 (进程句柄2), 0, )
进程_暂停进程 (进程句柄2)
信息框 (“暂停”, 0, )
进程_恢复进程 (进程句柄1)
信息框 (“恢复”, 0, )

实验表明这两个进程句柄都是有用的,这也解释了为什么不用的句柄要关闭,可以随开随用。

还有一个重要原因是:如果不及时关闭句柄,该句柄在句柄表中一直存在,则该句柄所指示的地址就一直不可用,造成资源浪费。

------------------------------------------------------------------------------------------------------------------------------------------

通过该实验对句柄有了更深入的理解。

句柄实际上是在句柄表中的。

句柄保存的是对象的地址。

对于进程ID确定的进程,他的进程地址是确定的。但是可以有多个句柄同时保存该进程地址,这也解释了为什么多个句柄都可以控制该进程。

--------------------------------------------------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/wanghj-dz/archive/2011/06/15/2081472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值