touch_xu 发表于 2011-2-18 09:04:53

【已解决】如何限制快捷键在单位时间内响应次数

本帖最后由 touch_xu 于 2011-2-24 05:12 编辑

如题:我定义了快捷键,我想让它在10秒内最多响应3次,不能限制具体时间,只要10内不超过3次就行,谢谢

chenronting 发表于 2011-2-18 10:25:18

我觉得可以用:TimerInit这样可以得到上次调用时相隔多少时间, 这样你再用一个判断就行了。如果还不会, 等下给你弄个例子吧

happytc 发表于 2011-2-18 10:54:55

本帖最后由 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

lanfengc 发表于 2011-2-18 12:23:53

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

happytc 发表于 2011-2-18 12:33:19

回复 4# lanfengc

你这个不就是我上面的嘛,还是用ElseIf好,少判断几次,程序执行效率高点。

其实最合理的,就判断执行次数的时间段,象“1 2 3”,“2 3 4” ,“3 4 5”……这样的
不过,这样就复杂多了

lanfengc 发表于 2011-2-18 12:36:34

{:face (427):}我习惯了这样写 看起来整洁。首先判断退出条件。 然后再判断其他的,这样执行效率应该比你先判断其他的要高。

happytc 发表于 2011-2-18 13:10:58

回复 6# lanfengc
怎么可能呢,你这样写,注定每个if都要判断执行下,而用ElseIf的话,只要到执行中间的某个后,后面的Elseif就不用去再判断了

你这样的习惯明显把程序效率搞低多了

touch_xu 发表于 2011-2-24 05:12:32

谢谢各位,已经OK
页: [1]
查看完整版本: 【已解决】如何限制快捷键在单位时间内响应次数