【已解决】如何限制快捷键在单位时间内响应次数
本帖最后由 touch_xu 于 2011-2-24 05:12 编辑如题:我定义了快捷键,我想让它在10秒内最多响应3次,不能限制具体时间,只要10内不超过3次就行,谢谢 我觉得可以用:TimerInit这样可以得到上次调用时相隔多少时间, 这样你再用一个判断就行了。如果还不会, 等下给你弄个例子吧 本帖最后由 happytc 于 2011-2-18 10:57 编辑
按时间来分段比较容易,如下。
#Include <Timers.au3>
Global $TimeOri = 0
Global $Count = 0
HotKeySet("^!n", "MyFunc")
While True
Sleep(100)
WEnd
Func MyFunc()
If $TimeOri = 0 Then
$TimeOri = _Timer_Init()
$Count = 1
MsgBox(0,"", "Start", 1)
ElseIf _Timer_Diff($TimeOri) > 10000 Then
MsgBox(0,"", ">10", 1)
$Count = 1
$TimeOri = _Timer_Init()
ElseIf $Count <= 3 Then
MsgBox(0,"", $Count, 1)
$Count += 1
ElseIf $Count > 3 Then
Return
EndIf
EndFunc
HotKeySet("s","Myfunc");注册热键 小写字母s
Global $Count=0,$Start=TimerInit();定义次数变量时间控制变量并初始化
While 1;创建死循环。
Sleep(1000);延迟1秒。 因为有了热键,这个消息循环基本上没什么用,延迟时间长点防CPU使用率高
ConsoleWrite("开始了"&Int(TimerDiff($Start)/1000)&"秒"&@CRLF) ;输出程序运行了几秒10秒一轮
WEnd
Func Myfunc()
$Count+=1 ;首先将次数控制变量加1. 因为初始化的是0,而我们要的是3次。0到3是4次。
If TimerDiff($Start)<10000 And $Count>3 Then Return ;若时间小于10秒且次数超过3次 则返回
If $Count<=3 Then ConsoleWrite($Count);次数小于3,输出当前次数
If TimerDiff($Start)>10000 Then;大于10秒, 初始化
$Start=TimerInit()
$Count=0
EndIf
EndFunc 回复 4# lanfengc
你这个不就是我上面的嘛,还是用ElseIf好,少判断几次,程序执行效率高点。
其实最合理的,就判断执行次数的时间段,象“1 2 3”,“2 3 4” ,“3 4 5”……这样的
不过,这样就复杂多了 {:face (427):}我习惯了这样写 看起来整洁。首先判断退出条件。 然后再判断其他的,这样执行效率应该比你先判断其他的要高。 回复 6# lanfengc
怎么可能呢,你这样写,注定每个if都要判断执行下,而用ElseIf的话,只要到执行中间的某个后,后面的Elseif就不用去再判断了
你这样的习惯明显把程序效率搞低多了 谢谢各位,已经OK
页:
[1]