是否有“睡眠”的阻止版本? (AHK)

时间:2014-12-12 20:55:38

标签: sleep autohotkey blocking

我有一个热键,我反复按很快,我在例行程序中包含一个Sleep来扼杀它。但是当我以更快的速度前进时,输出开始变得混乱。罪魁祸首绝对是睡眠,因为当我拿出它并让它按照它想要的速度前进时,输出就可以了。我知道Sleep允许新进程在等待时启动,因此我认为让同一个热键的所有这些新进程相互依赖是什么?导致错误。因此,我想知道睡眠功能的变化是否会在等待时阻止新进程?我无法在文档或谷歌中找到类似的内容。

2 个答案:

答案 0 :(得分:1)

在C ++中,你会在这种情况下使用互斥锁。在AHK你必须解决这个问题,有多种方法可以做到这一点 一种方法是在任何热键执行操作时禁用热键。为此你可以使用一个简单的变量 示例:

#If !mutex_locked 
F2::
    mutex_locked := True
    Send, letters incomming...
    Sleep, 500
    Send, abcdefghijklmnopqrstuvwxyz
    mutex_locked := False
Return
F3::
    mutex_locked := True
    Send, numbers incomming...
    Sleep, 500
    Send, 1234567890
    mutex_locked := False
Return
#If

当名为mutex_locked的变量设置为false时,将禁用热键。一旦完成,他们就会再次将变量设置为true。

答案 1 :(得分:0)

我喜欢上面的Forivin代码/答案,但我认为以下内容也是相关的。

来自AHK参考:(https://autohotkey.com/docs/misc/Threads.htm

"默认情况下,如果给定的热键或热字符串子例程已在运行,则它不能再次运行。使用#MaxThreadsPerHotkey更改此行为。"

#MaxThreadsPerHotkey的信息位于:(https://autohotkey.com/docs/commands/_MaxThreadsPerHotkey.htm

也许允许同一个热键在不同的线程中同时运行(通过增加#MaxThreadsPerHotkey)可以绕过这个问题?只是一个猜测...随时确认或纠正这个概念。