本帖最后由 easied 于 2011-2-26 02:13 编辑
先说一下你那代码的问题
1.结构错误.你的if和elseif把ProcessExists的返回值都判断完了.无论任何时候else都无效,所以程序不会退出
2.延迟错误:在while...wend有可能造成死循环的时候,在wend应该在前面一行加个sleep.这可以防止CPU占用率达100%
3.要是PubwinClient.exe不能运行,Run了也会弹出出错提示或者无响应,程序直接将直接跳过.所以在这里不需要while循环
4.个人建议只用if...else...endif,尽量不用elseif.如果有多种条件,则使用select...endselect来代替.这样子会比较直观;更改判断结构
If ProcessExists("PubwinClient.exe") Then
Sleep(6000)
Else
Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
While 1
If ProcessExists("PubwinClient.exe") Then ExitLoop
Sleep(1000)
WEnd
Sleep(6000)
EndIf
;使用do...until代替while...wend死循环
If ProcessExists("PubwinClient.exe") Then
Sleep(6000)
Else
Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
Do
Sleep(1000)
Until ProcessExists("PubwinClient.exe")
Sleep(6000)
EndIf
;以上两种结构下如果PubwinClient.exe不能启动,会陷入死循环
;要解决这个问题,需要添加一个超时设置
#include <Date.au3>
If ProcessExists("PubwinClient.exe") Then
Sleep(6000)
Else
Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
Local $sTimer = _NowCalc()
Do
;30仍未能启动则判断PubwinClient.exe不能运行,跳出死循环
If _DateDiff("s", $sTimer, _NowCalc()) > 30 Then ExitLoop
Sleep(1000)
Until ProcessExists("PubwinClient.exe")
Sleep(6000)
EndIf
;因为能不能运行PubwinClient.exe只和软件安装与否有关,和Run无关.以直接Run一次就可以了,在这里不需要循环结构
If ProcessExists("PubwinClient.exe") Then
Sleep(6000)
Else
Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
Sleep(6000)
EndIf
;把Sleep(6000)提取出来
If ProcessExists("PubwinClient.exe") Then
Else
Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
EndIf
Sleep(6000)
;再改一下判断结构
If Not ProcessExists("PubwinClient.exe") Then
Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
EndIf
Sleep(6000)
;继续减.最后就变成这样子了
If Not ProcessExists("PubwinClient.exe") Then Run("C:\Program Files\HintSoft\PubwinClient\PubwinClient.exe")
Sleep(6000)
以后代码用SciTe写,在论坛贴的时候用[code]标签把代码括起来过来,这样子方便查找. |