当我调用此函数时,它会运行几分钟然后脚本退出。我发现如果我将睡眠时间设置得更高,它需要更长时间才能退出。我有什么方法可以写这个,以便它永远不会退出?我认为这与使用的内存有关。循环之间的延迟必须为500毫秒或更低。
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()
}
答案 0 :(得分:1)
正如Jongware评论的那样,
它退出是因为堆栈溢出:两个函数都调用自己,并且永远不会返回。将递归调用更改为连续循环以解决它。
尝试图像搜索后,您的功能可以采用三种路径:
由于前两个案例正在退出函数,因此更改函数以使用循环非常简单:只需删除递归调用并将函数内容包装在Loop {}
中。
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.
}
}
}