返回列表 发帖

[系统综合] 点击刷新和退出都不成功,如何做无限制循环执行并且可以刷新和退出

本帖最后由 heheghostxp 于 2018-2-7 14:01 编辑

用sleep做PING的循环执行, 点击刷新和退出都不成功,如何做无限制循环执行并且可以刷新和退出;若循环执行SLEEP 改用AdlibRegister 时间就会停止,报警间隔也会停止,而循环ping是正常的。各位大神如何修改?请赐教,十分谢谢
  1. #NoTrayIcon
  2. #RequireAdmin
  3. #Region ;**** 参数创建于 ACNWrapper_GUI ****
  4. #PRE_Icon=1.ico
  5. #PRE_Outfile=网络监控程序).exe
  6. #PRE_Compression=4
  7. #PRE_UseX64=n
  8. #PRE_Res_Description=网络监控程序
  9. #PRE_Res_Fileversion=1
  10. #PRE_Res_ProductVersion=
  11. #PRE_Res_LegalCopyright=
  12. #PRE_Res_requestedExecutionLevel=None
  13. #PRE_Res_Field=ProductName|网络监控程序
  14. #PRE_Run_AU3Check=N
  15. #PRE_Run_Tidy=Y
  16. #Tidy_Parameters=/sci 1
  17. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
  18. #Region

  19. #EndRegion
  20. #Region
  21. #EndRegion
  22. #include <Array.au3>
  23. #include <Access.au3>
  24. #include <ButtonConstants.au3>
  25. #include <Constants.au3>
  26. #include <EditConstants.au3>
  27. #include <FileConstants.au3>
  28. #include <GUIConstantsEx.au3>
  29. #include <GuiTab.au3>
  30. #include <GuiEdit.au3>
  31. #include <GuiListView.au3>
  32. #include <IE.au3>
  33. #include <ListViewConstants.au3>
  34. #include <MsgBoxConstants.au3>
  35. #include <Misc.au3>
  36. #include <process.au3>
  37. #include <Sound.au3>
  38. #include <string.au3>
  39. #include <StaticConstants.au3>
  40. #include <TabConstants.au3>
  41. #include <TrayConstants.au3>
  42. #include <WinAPIFiles.au3>
  43. #include <WindowsConstants.au3>

  44. Opt("MustDeclareVars", 1)
  45. _WinAPI_Wow64EnableWow64FsRedirection(False)
  46. ProcessSetPriority(@AutoItPID, 3)

  47. Local $form1, $auto, $BT, $Button1, $Button2, $font, $WK, $name0, $var0, $0, $0_add, $nMsg

  48. Dim $WK[8] = [8, "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

  49. $form1 = GUICreate("网络监控程序", 400, 300)
  50. $font = "Comic Sans MS"

  51. $BT = GUICtrlCreateLabel(@YEAR & "年" & @MON & "月" & @MDAY & "日(" & $WK[@WDAY] & ")" & @LF & "  " & @HOUR & ":" & @MIN & ":" & @SEC, 105, 5, 180, 25)
  52. GUICtrlSetColor($BT, 0xff0033)
  53. AdlibRegister("_Timer", 1000)

  54. Local $Alarm = @ScriptDir & "\Alarm.wav"

  55. $name0 = IniRead(@ScriptDir & "\config.ini", "server", "name0", "")
  56. $0_add = IniRead(@ScriptDir & "\config.ini", "server", "server0", "")
  57. $Button1 = GUICtrlCreateButton("刷新", 150, 200)
  58. $Button2 = GUICtrlCreateButton("退出", 250, 200)
  59. GUICtrlCreateButton($name0, 30, 45, 160, 35, $BS_CENTER)
  60. $var0 = GUICtrlCreateButton("", 70, 85, 80, 30)

  61. GUISetState(@SW_SHOW)


  62. $auto = Run(_auto())

  63. While 1

  64.         $nMsg = GUIGetMsg()
  65.         Switch $nMsg
  66.                 Case $GUI_EVENT_CLOSE

  67.                         Quit()

  68.                 Case $Button1
  69.                        
  70.                         _Label0()
  71.                        

  72.                 Case $Button2
  73.                         Quit()

  74.         EndSwitch

  75. WEnd

  76. Func _auto()

  77.         _Label0()
  78.        
  79.        
  80.         _timer1()
  81.         _auto0()
  82.        
  83. EndFunc   ;==>_auto

  84. Func _Label0()

  85.         $0 = Ping($0_add, 4000)
  86.         If $0 Then
  87.                 GUICtrlSetData($var0, $0 & "毫秒")
  88.                 GUICtrlSetBkColor($var0, 0x9AFF9A)
  89.                 GUICtrlSetColor($var0, 0x000000)
  90.                 IniWrite(@ScriptDir & "\Screening0.ini", "Screening", "Screening0", "0")
  91.         Else
  92.                 GUICtrlSetData($var0, "超时")
  93.                 GUICtrlSetBkColor($var0, 0xFF3030)
  94.                 GUICtrlSetColor($var0, 0x000000)
  95.                 IniWrite(@ScriptDir & "\Screening0.ini", "Screening", "Screening0", "1")
  96.                
  97.         EndIf
  98. EndFunc   ;==>_Label0

  99. Func _Timer()

  100.         GUICtrlSetData($BT, @YEAR & "年" & @MON & "月" & @MDAY & "日(" & $WK[@WDAY] & ")" & @LF & "      " & @HOUR & ":" & @MIN & ":" & @SEC)
  101.        
  102. EndFunc   ;==>_Timer

  103. Func _auto0()
  104.         Sleep(6000)
  105.         _auto()
  106. EndFunc   ;==>_auto0

  107. Func _timer1()
  108.         AdlibRegister("_Alarm()", 20000)
  109. EndFunc   ;==>_timer1

  110. Func _Alarm()

  111.         If (IniRead(@ScriptDir & "\Screening0.ini", "Screening", "Screening0", "") = "1") Then
  112.                
  113.                 _SoundPlay($Alarm, 0)


  114.         EndIf
  115. EndFunc   ;==>_Alarm


  116. Func Quit()
  117.         Exit
  118. EndFunc   ;==>Quit
复制代码

Sleep(6000)看你怎么点

不知道是不是这样,没懂意思!
  1. #NoTrayIcon

  2. #RequireAdmin

  3. #Region ;**** 参数创建于 ACNWrapper_GUI ****

  4. #PRE_Icon=1.ico

  5. #PRE_Outfile=网络监控程序).exe

  6. #PRE_Compression=4

  7. #PRE_UseX64=n

  8. #PRE_Res_Description=网络监控程序

  9. #PRE_Res_Fileversion=1

  10. #PRE_Res_ProductVersion=

  11. #PRE_Res_LegalCopyright=

  12. #PRE_Res_requestedExecutionLevel=None

  13. #PRE_Res_Field=ProductName|网络监控程序

  14. #PRE_Run_AU3Check=N

  15. #PRE_Run_Tidy=Y

  16. #Tidy_Parameters=/sci 1

  17. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****

  18.  

  19. #include <Array.au3>

  20. #include <Access.au3>

  21. #include <ButtonConstants.au3>

  22. #include <Constants.au3>

  23. #include <EditConstants.au3>

  24. #include <FileConstants.au3>

  25. #include <GUIConstantsEx.au3>

  26. #include <GuiTab.au3>

  27. #include <GuiEdit.au3>

  28. #include <GuiListView.au3>

  29. #include <IE.au3>

  30. #include <ListViewConstants.au3>

  31. #include <MsgBoxConstants.au3>

  32. #include <Misc.au3>

  33. #include <process.au3>

  34. #include <Sound.au3>

  35. #include <string.au3>

  36. #include <StaticConstants.au3>

  37. #include <TabConstants.au3>

  38. #include <TrayConstants.au3>

  39. #include <WinAPIFiles.au3>

  40. #include <WindowsConstants.au3>

  41.  

  42. Opt("MustDeclareVars", 1)

  43. _WinAPI_Wow64EnableWow64FsRedirection(False)


  44.  

  45. Local $form1, $auto, $BT, $Button1, $Button2, $font, $WK, $name0, $var0, $0, $0_add, $nMsg

  46.  

  47. Dim $WK[8] = [8, "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

  48.  

  49. $form1 = GUICreate("网络监控程序", 400, 300)

  50. $font = "Comic Sans MS"

  51.  

  52. $BT = GUICtrlCreateLabel(@YEAR & "年" & @MON & "月" & @MDAY & "日(" & $WK[@WDAY] & ")" & @LF & "      " & @HOUR & ":" & @MIN & ":" & @SEC, 105, 5, 180, 25)

  53. GUICtrlSetColor($BT, 0xff0033)

  54. AdlibRegister("_Timer", 1000)

  55.  

  56. Local $Alarm = @ScriptDir & "\Alarm.wav"

  57.  

  58. $name0 = IniRead(@ScriptDir & "\config.ini", "server", "name0", "")

  59. $0_add = IniRead(@ScriptDir & "\config.ini", "server", "server0", "")

  60. $Button1 = GUICtrlCreateButton("刷新", 150, 200)

  61. $Button2 = GUICtrlCreateButton("退出", 250, 200)

  62. GUICtrlCreateButton($name0, 30, 45, 160, 35, $BS_CENTER)

  63. $var0 = GUICtrlCreateButton("", 70, 85, 80, 30)

  64.  


  65.  

  66.  

  67. _Label0()

  68. _timer1()

  69.  


  70.         $nMsg = GUIGetMsg()

  71.         Switch $nMsg

  72.                 Case $GUI_EVENT_CLOSE

  73.                         Quit()

  74.  

  75.                 Case $Button1

  76.                         _Label0()

  77.  

  78.                 Case $Button2

  79.                         Quit()

  80.  

  81.         EndSwitch

  82.  


  83.  

  84. Func _Label0()

  85.         $0 = Ping($0_add, 4000)

  86.         If $0 Then

  87.                 GUICtrlSetData($var0, $0 & "毫秒")

  88.                 GUICtrlSetBkColor($var0, 0x9AFF9A)

  89.                 GUICtrlSetColor($var0, 0x000000)

  90.                 IniWrite(@ScriptDir & "\Screening0.ini", "Screening", "Screening0", "0")

  91.         Else

  92.                 GUICtrlSetData($var0, "超时")

  93.                 GUICtrlSetBkColor($var0, 0xFF3030)

  94.                 GUICtrlSetColor($var0, 0x000000)

  95.                 IniWrite(@ScriptDir & "\Screening0.ini", "Screening", "Screening0", "1")

  96.         EndIf

  97. EndFunc   ;==>_Label0

  98.  

  99. Func _Timer()

  100.         GUICtrlSetData($BT, @YEAR & "年" & @MON & "月" & @MDAY & "日(" & $WK[@WDAY] & ")" & @LF & "      " & @HOUR & ":" & @MIN & ":" & @SEC)

  101. EndFunc   ;==>_Timer

  102.  

  103. Func _timer1()

  104.         AdlibRegister("_Alarm()", 20000)

  105. EndFunc   ;==>_timer1

  106.  

  107. Func _Alarm()

  108.         _Label0()

  109.         If (IniRead(@ScriptDir & "\Screening0.ini", "Screening", "Screening0", "") = "1") Then

  110.                 _SoundPlay($Alarm, 0)

  111.         EndIf

  112. EndFunc   ;==>_Alarm

  113.  

  114. Func Quit()

  115.         Exit

  116. EndFunc   ;==>Quit

复制代码 高亮切换

TOP

回复 2# xzf680


    谢谢,但是我的意思是ping循环和 Alarm 循环是两个独立的,就是说Alrm是独立定时循环检测,PING也是独立执行的,请问有办法操作吗?

TOP

回复 3# heheghostxp [/
   
PING 跟 Alarm  有甚麼不一樣??

全部 用 AdlibRegister  這個來做 不就好了嗎??

TOP

本帖最后由 heheghostxp 于 2018-2-7 17:14 编辑

回复 4# kk_lee69
比如说 我需要5分钟PING 一次,但是我的Alrm需要定时30秒一次,这样可以弥补刚刚发出报警的时后我没有电脑前的提示。我可以很快知道有报警,而不是它5分钟以后,再次PING 的时候发出报警我才知道。我这样说你们是否清楚?而且使用多个AdlibRegister 会造成主流程窗口时间和报警时间停止,只有定时ping在执行。不知道有什么方法可以代替SLEEP ?按照我的方法只是刷新和退出无法执行,其他功能正常,想退出只有结束进程才能完成,刷新也无法使用是因为主流程占用了,如果使用AdlibRegister 会造成主流程窗口时间和报警定时时间停止。

TOP

回复 5# heheghostxp

你怎麼計算5分鐘??   你的邏輯是有問題的  不會有人拿 SLEEP 當作計時工具

每五分鐘 應該採取 AdlibRegister 才對....

且 AdlibRegister 是最不影響 程式的

TOP

本帖最后由 kk_lee69 于 2018-2-7 17:47 编辑

回复 5# heheghostxp

你可不可以縮小你的 模型  用 ConsoleWrite("執行PING") 與 ConsoleWrite("執行 Alarm")  代替你要做的事情

寫出 你 目前的架構為何??

或者 能否寫出你的架構 用一個 不需要 外加任何檔案 就可以執行正常的

方便測試

TOP

回复 5# heheghostxp
  1. #include <GDIPlus.au3>
  2. #include <GUIConstantsEx.au3>
  3. #include <GuiListView.au3>

  4. #include <GUIComboBox.au3>

  5. #include <Constants.au3>
  6. #include <GuiImageList.au3>
  7. #include <WindowsConstants.au3>
  8. #include <EditConstants.au3>
  9. #include <FontConstants.au3>
  10. #include <GuiEdit.au3>




  11. Opt("GUIOnEventMode", 1)
  12. $WinMain = GuiCreate("",800,600,-1,-1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_GROUP, $WS_TABSTOP))

  13. $B1 = GuiCtrlCreateButton('B1', 290, 58, 80, 25); 清除紀錄按鈕
  14. $B2 = GuiCtrlCreateButton('B2', 290, 88, 80, 25); 清除紀錄按鈕

  15. AdlibRegister("A_PING", 1000)
  16. AdlibRegister("A_Alarm", 500)

  17. GUICtrlSetOnEvent($B1, "GUI_COMMAND")
  18. GUICtrlSetOnEvent($B2, "GUI_COMMAND")
  19. GUISetOnEvent($GUI_EVENT_CLOSE,"GUI_COMMAND")
  20. GUISetState()

  21. While 1

  22. Sleep(20)

  23. WEnd

  24. GUIDelete()


  25. Func GUI_COMMAND()
  26.     Switch @GUI_CtrlId
  27.         Case $GUI_EVENT_CLOSE
  28.             Switch @GUI_WINHANDLE
  29.                                 Case $WinMain
  30.                                         ;DllCallbackFree($wProcNew)
  31.                     Exit

  32.                 Case $WinSub
  33.                     GUIDelete(@GUI_WINHANDLE)
  34.                                         ;GUICtrlSendMsg($hTab, 4912, 0, 0)
  35.                                         GuiSetState(@SW_ENABLE,$WinMain) ; 使窗口重新可用

  36.                 Case Else
  37.                  ;   GUIDelete(@GUI_WINHANDLE)
  38.        
  39.                                        
  40.                                        
  41.                   
  42.             EndSwitch




  43.                 Case $B1
  44.                        
  45.                        
  46.                 Case $B2
  47.                        
  48.                        
  49.         EndSwitch
  50. EndFunc


  51. Func A_PING()
  52.         ConsoleWrite("執行PING"&@CRLF)
  53. EndFunc


  54. Func A_Alarm()
  55.         ConsoleWrite("執行Alarm"&@CRLF)
  56. EndFunc
复制代码
這樣不就可以 無限循環跟退出

TOP

sleep 时间过长,过频,
或是执行的工作耗时长,
那还是老实点玩多进程吧.
Hi ...

TOP

sleep 时间过长,过频,
或是执行的工作耗时长,
那还是老实点玩多进程吧.
Hi ...

TOP

回复 8# kk_lee69


    这样还会时间停止,如报警超过5个以上就会停止,低于5个就会好一些。估计是PING的时候造成PING线程阻塞导致的,网络立即ping通就会恢复计时。

TOP

回复 11# heheghostxp


    我的範例有停止嗎??

TOP

回复 11# heheghostxp


    估计是PING的时候造成PING线程阻塞导致的,网络立即ping通就会恢复计时  

這是寫法問題..........你可以在 PING 的時候  先取消 AdlibRegister  PING 完畢後再 重新註冊 AdlibRegister

TOP

回复 13# kk_lee69


    你的范例和先取消再注册都不行,还是时间停止

TOP

回复 13# kk_lee69


    唯独用SLEEP执行循环ping不会停止时间,但不能刷新和关闭软件,只有关闭进程才行

TOP

返回列表