Autohotkey 导致脚本退出的递归函数
当我调用这个函数时,它会运行几分钟,然后脚本退出。我发现,如果我将睡眠时间设置得更高,它需要更长的时间才能退出。有没有什么方法可以让它永远不存在?我认为这与正在使用的内存有关。环路之间的延迟必须为500ms或更低Autohotkey 导致脚本退出的递归函数,autohotkey,Autohotkey,当我调用这个函数时,它会运行几分钟,然后脚本退出。我发现,如果我将睡眠时间设置得更高,它需要更长的时间才能退出。有没有什么方法可以让它永远不存在?我认为这与正在使用的内存有关。环路之间的延迟必须为500ms或更低 Waitbeforefight() { Random, Wbf, 500, 500 sleep %Wbf% ImageSearch, FoundX2, FoundY2, 855, 915, 1024, 1071, *30 E:\Desktop\Capture23
Waitbeforefight()
{
Random, Wbf, 500, 500
sleep %Wbf%
ImageSearch, FoundX2, FoundY2, 855, 915, 1024, 1071, *30 E:\Desktop\Capture23.png
if ErrorLevel = 2
{
MsgBox Could not conduct the search.
ExitApp
}
else if ErrorLevel = 1
{
return
}
else
{
sleep %Wbf%
Waitbeforefight()
}
}
即使我制作了这样一个简单的脚本,它也会退出
func1()
{
sleep 50
func1()
}
F1::
{
func1()
}
正如Jongware评论的那样
它退出是因为堆栈溢出:两个函数都调用自己,并且永远不会返回。将递归调用更改为连续循环以解决它 尝试图像搜索后,函数可以采用三种路径:
- 如果无法执行搜索,脚本将退出
- 如果找不到图像,则函数返回
- 否则,将找到图像并重复该函数
循环{}
中即可
Waitbeforefight()
{
Loop
{
Random, Wbf, 500, 500
sleep %Wbf%
ImageSearch, FoundX2, FoundY2, 855, 915, 1024, 1071, *30 E:\Desktop\Capture23.png
if ErrorLevel = 2
{
MsgBox Could not conduct the search.
ExitApp
}
else if ErrorLevel = 1
{
return
}
else
{
sleep %Wbf%
; Instead of calling self, just allow the loop to continue.
}
}
}
它退出是因为堆栈溢出:两个函数都调用自己,并且永远不会返回。将递归调用更改为连续循环来解决它。哈哈,很有趣。我可以在if..then语句的循环中放入一个循环,然后在if..then语句中放入更多if..then语句吗?你能举个例子吗?对于第一个,一旦找到图像,它就会返回,这就是我想要它做的。我希望它永远持续下去,直到找到图像为止。谢谢对不起,我不能给你一个例子,因为我不知道这是什么样的编程语言。它有手册吗?是自动热键。是的,网上有文档。不过没关系,我可以问问其他地方。