Sniperwolf Posted July 8, 2009 Share Posted July 8, 2009 (edited) Hi guys! Im not sure how these scripts you build with AutoIT works, that's why I came to think of if calling a function inside a function causes any problems. For example: Func main() "Do this" "Do that" "Check something" If @error then main() endif "Do 2" "Do 3" End Func Does this cause the function main() to run inside the function main and possible do this over and over and over..... How does it work? Edited July 8, 2009 by Sniperwolf Link to comment Share on other sites More sharing options...
trancexx Posted July 8, 2009 Share Posted July 8, 2009 You could have memory leaking issues. But generally, if you are in control it's ok. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
Sniperwolf Posted July 8, 2009 Author Share Posted July 8, 2009 (edited) Ok, thanks for the reply. To explain even further why I am doing this. I have a main() that inside calls a lot of other different functions, but in one of those function if a condition is met I reset all the stored values then run main() to start the function from the top again. If this isn't the way I should do it, anyone have any suggestion on a different way of doing it perhaps? Was just thinking if the script would fail if it does this like 100 times or something, if the script needs to keep track of in which function it is in (yes sir I am having trouble explaining what I mean in a normal understandable way ) Then it would be inside the 99th main() inside all other previously called main(). Kind of like inside main()inside the func that called main() inside main() inside the function that called main() and so on. Or am I just not getting how scripts work? Edited July 8, 2009 by Sniperwolf Link to comment Share on other sites More sharing options...
Juvigy Posted July 8, 2009 Share Posted July 8, 2009 (edited) This is called recursion. Check it out it is general chapter in programming. Calculation of x factoriel is a good example.Not very wise to be used from beginners. In your case i would suggest to run the main function in a loop Edited July 8, 2009 by Juvigy Link to comment Share on other sites More sharing options...
Authenticity Posted July 8, 2009 Share Posted July 8, 2009 If the program is going to be executed for a long time and it's expected that the condition is going to be satisfied many times you may want to rewrite the program in a way the functionalities you wish to preform more than only in the program initialization are on their on function or functions. With the script you've posted, main() will somewhere during it's execution exceed the recursion depth limit and crash, it'll also eat a lot of ram but for as long as it remains runnning. Link to comment Share on other sites More sharing options...
Sniperwolf Posted July 8, 2009 Author Share Posted July 8, 2009 From what I hear then I should probably try and stay away from that then . So by using a loop does the following work? Can I exit a loop from inside a function inside of the loop? Func main() While 1 func1() func2() CheckCondition() func3() func4() Wend EndFunc Func CheckCondition() Checksomething If @error then ExitLoop EndFunc While 1 main() WEnd Or is this the way to do it? Func main() While 1 func1() func2() CheckCondition() If $conditionmet=1 Then ExitLoop func3() func4() Wend EndFunc Func CheckCondition() Checksomething If @error then $conditionmet=1 EndIf EndFunc While 1 main() WEnd This assuming I can have loops inside loops and the exitloop only exit the current loop the script is running yes? Link to comment Share on other sites More sharing options...
Juvigy Posted July 8, 2009 Share Posted July 8, 2009 Functions can return values.in CheckCondition() useReturn 1and in the loop try:If CheckCondition()=1 Then ExitLoop Link to comment Share on other sites More sharing options...
Sniperwolf Posted July 8, 2009 Author Share Posted July 8, 2009 Thanks for all your help guys, much appriciated, something like this will work then to avoid recursion Func main() MsgBox(0,"Message","Starting main function") While 1 MsgBox(0,"Message","First func inside main") MsgBox(0,"Message","Second func inside main") If CheckCondition()=1 Then ExitLoop MsgBox(0,"Message","Third func inside main") MsgBox(0,"Message","Fourth func inside main") Wend EndFunc Func CheckCondition() $question = MsgBox(4,"Make your choice!","Do you want the script to restart from the begginning?") If $question = 6 Then Return 1 EndIf EndFunc While 1 main() WEnd Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now