ac5474012 发表于 2010-5-25 14:46:57

如何判定一个程序是否在未响应状态

我现在在win2008下运行一个A程序,我做了一个判定,如果A程序进程不存在就从新启动一个A程序.但是现在我发现在win2008下系统会阻止程序进程关闭.弹出一个调试什么的对话框.请问如何解决这个问题?如何判定这个是否变成没响应状态?

A程序不是au3编写的我也不能编写它.

ac5474012 发表于 2010-5-26 13:58:36

就如此之难吗?

lynfr8 发表于 2010-5-26 14:19:52

弹出一个调试什么的对话框
那就监控这个窗口是否出现吧
if WinExists... then ...

ac5474012 发表于 2010-5-26 16:39:58

回复 3# lynfr8

会不会导致系统资源占用过高?不过倒是可以10分钟一次.不过这个检测可能要长时间开启.那样的话会不会经过日积月累让这个监控的au3程序占用太多内存?

ac5474012 发表于 2010-5-26 16:56:32

回复 3# lynfr8

会不会导致系统资源占用过高?不过倒是可以10分钟一次.不过这个检测可能要长时间开启.那样的话会不会经过日积月累让这个监控的au3程序占用太多内存?

lynfr8 发表于 2010-5-26 20:06:27

会不会导致系统资源占用过高?不过倒是可以10分钟一次.不过这个检测可能要长时间开启.那样 ...
ac5474012 发表于 2010-5-26 16:56 http://www.autoitx.com/images/common/back.gif_ReduceMemory(@AutoItPID) ;释放内存
Func _ReduceMemory($i_PID = -1)
      If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
      Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
      EndIf

      Return $ai_Return
EndFunc

yejier 发表于 2010-5-26 20:46:03

顶贴、回帖、拿分、走人!url

ac5474012 发表于 2010-5-27 14:30:51

这是个释放内存模块?多谢拉,一直想找一个。

yarsye 发表于 2010-5-27 14:48:48

怎么看效果?

ac5474012 发表于 2010-5-27 14:54:16

回复 9# yarsye

你指的是什么效果?

dajun 发表于 2010-5-27 15:01:57

很好,效果不错!

yarsye 发表于 2010-5-27 15:02:48

sleep1分钟看能不能执行那个程序 , 如果可以就接着做下面的
如果1分钟后还没等到你要的窗口,你就winkill 然后再重新run

yarsye 发表于 2010-5-27 15:05:19


lynfr8 发表于 2010-5-26 20:06 http://www.autoitx.com/images/common/back.gif


    其实我比较对这个感兴趣 就是看不懂 也不知道这个程序跑会有什么反应

yarsye 发表于 2010-5-27 15:05:40


lynfr8 发表于 2010-5-26 20:06 http://www.autoitx.com/images/common/back.gif


    其实我比较对这个感兴趣 就是看不懂 也不知道这个程序跑会有什么反应

zps26 发表于 2010-5-29 21:00:46

也可以监测进程是否存在
页: [1] 2
查看完整版本: 如何判定一个程序是否在未响应状态