用定时器代替循环的例子 By FeiYue

热键使用普通循环容易卡顿失效,而改为定时器循环则不会。

↓↓↓↓↓↓↓↓以下是使用定时器的一个例子源码↓↓↓↓↓↓↓↓

;---------------------------------------
;  用定时器代替循环的例子  By FeiYue
;
;  说明:热键使用普通循环容易卡顿失效,而改为定时器循环则不会
;---------------------------------------

定时器执行(myfunc="", ByRef arg1="", args*)
{
  static last:="", timer:=[]
  Critical
  if (i:=InStr(arg1, "^_^"))
  {
    if GetKeyState(SubStr(arg1,1,i-1), "P")
    {
      Critical, Off
      return arg1:=SubStr(arg1, i+3)
    }
    last:=""
    SetTimer,, Off
    Exit
  }
  if (key:=LTrim(A_ThisHotkey, "~$*!^+#<>"))=""
    Exit
  s:=key "^_^" myfunc "@" arg1
  For i,v in args
    s.="@" v
  if (s=last)
    Exit
  For i,v in timer
    SetTimer, % v, Off
  if !(v:=timer[last:=s])
    timer[s]:=v:=Func(myfunc).Bind(key "^_^" arg1, args*)
  SetTimer, % v, 1
  Exit
}


F1:: Reload  ;-- 重启

F2:: Suspend  ;-- 暂停热键

$1:: 函数1("a")  ;-- 初始的 Loop 循环函数
$2:: 函数1("b")  ;-- 初始的 Loop 循环函数

$3:: 函数2("c")  ;-- 修改后的 定时器 循环函数
$4:: 函数2("d")  ;-- 修改后的 定时器 循环函数

函数1(k, k1="", k2="", k3="")
{
  key:=LTrim(A_ThisHotkey, "~$*!^+#<>")
  While GetKeyState(key, "P")
  {
    Send % k
    Sleep, 30
  }
}

函数2(k, k1="", k2="", k3="")
{
  定时器执行(A_ThisFunc, k, k1, k2, k3)
  Send % k
  Sleep, 30
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA捐赠
共{{data.count}}人
人已捐赠
教程

简单、高效、实用的图片操作库 —— ImagePut 轻松实现截图、转换、缩放、裁剪等各种功能

2021-10-12 11:00:06

教程

MsgBox倒计时的三种方法

2021-10-19 14:31:01

8 条回复 A文章作者 M管理员
  1. hexuren

    飞跃老哥的代码值得研究!

  2. 水龍敬

    研究研究

  3. AHK小甜甜

    111

  4. 孤独求败

    居然看不懂

  5. netcy

    积分不够,评论来凑

  6. 墙左墙右

    好巧,我也看不懂

  7. Enigma

    飞跃大佬, 能不能把帮助里的Settimer 示例 三击. 多击的示例. 做成通用的函数?

  8. 12319494

    坚持学

个人中心
购物车
优惠劵
有新私信 私信列表
搜索