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