[已解决]除了多进程,还有什么方式让这个GUI不卡?
本帖最后由 itljl 于 2010-8-18 12:29 编辑#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 259, 83, 192, 114)
$Label1 = GUICtrlCreateLabel("测试测试测试测试测试测试", 64, 24)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
For $i = 1 To 254
$var = Ping("192.168.0." & $i)
GUICtrlSetData($Label1, "192.168.0." & $i & " Re: " & $var & " ms")
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd比如上面的代码,在PING的过程中,GUI是相当卡的,连移动窗口都不很卡,鼠标一放上去就显示忙。有没有除了多进程之外,解决这种在PING或者其它函数执行过程中,GUI不卡的办法吗?
比如,在CMD中ping就没有这个问题。 首先强调,这个不是GUI的问题
是PING的问题
你单独运行这段代码,也会很慢的
For $i = 1 To 254
$var = Ping("192.168.0." & $i)
Next
给点思路你,其余自己去发挥吧
既然是ping内网,那么ping一次就够了,数据包也可小点,且timeout在50之类
更改ping的设置为
ping -n 1 -l 16 -w 50 本帖最后由 itljl 于 2010-7-12 21:38 编辑
回复 2# bob
你好,谢谢回复。
就算是ping,1 (超时在1MS)也会卡的。
当然我说的卡,不是指这个ping 不应该卡,只是我们发现在cmd中ping的话,就算超时是4S,CMD窗口也能自由移动。
所以我想讨论的是,在AU3中,有什么办法在一些函数如ping,在执行时需要较长时间来反应的情况下,GUI能够自如操作,如移动窗口等。 Bing614兄不是发了一个多线程ping吗,把那个改成UDF调用好了。 4楼的办法才是根本解决之道。
当然了,也可以用CMD来ping,读回显吧.... #include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 259, 83, 192, 114)
$Label1 = GUICtrlCreateLabel("测试测试测试测试测试测试", 64, 24)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$i=1
;For $i = 1 To 254
;$var = Ping("192.168.0." & $i)
;GUICtrlSetData($Label1, "192.168.0." & $i & " Re: " & $var & " ms")
;Next
$j=0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If Mod($j,64)=0 Then
If $i<=254 Then
$var = Ping("192.168.0." & $i,100)
GUICtrlSetData($Label1, "192.168.0." & $i & " Re: " & $var & " ms")
$i=$i+1
EndIf
EndIf
If $j<20000 Then
$j=$j+1
EndIf
WEnd这样算不算呢?给分,哈哈.本来想一天回一贴,今天已经第二贴了 回复 6# akmm88
确实好很多,兄弟这是什么原理呢? 执行死循环时,必须抽时间来处理GUIGetMsg()
如果WINDOWS发到你窗口的消息未被接收,窗口处于未响应.
If Mod($j,64)=0 Then 处理64次的窗口消息,才做一次PING命令
窗口消息很频繁的,比如鼠标在上面移动.会不断的产生mousemove消息.
页:
[1]