用定时器代替循环的例子 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}}人
人已赞赏
AHKV1办公工具

【工具 资源管理器文件快速定位】支持拼音全拼、首字母、多音字;待完善

2021-10-9 20:29:17

AHKV1学习

MsgBox倒计时的三种方法

2021-10-19 14:31:01

5 条回复 A文章作者 M管理员
  1. 1河许人

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

  2. 水龍敬

    研究研究

  3. 孤独求败

    居然看不懂

  4. netcy

    积分不够,评论来凑

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