小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程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确定的进程,他的进程地址是确定的。但是可以有多个句柄同时保存该进程地址,这也解释了为什么多个句柄都可以控制该进程。

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

posted on 2011-06-15 14:27  wanghj_dz  阅读(598)  评论(0编辑  收藏  举报

导航