Methos Posted July 15, 2004 Share Posted July 15, 2004 (edited) I got an error in a script i was writing saying i've reached the max recursion level. Is there a way to set this to infinite? This is supposed to be an endless loop. Heres my script: expandcollapse popup; shortcut/cmdline example: C:\idletest.exe "C:\example\example.exe" 18 10000 ;getting the data from the command line $resetrunprogram = $CmdLine[1];command to run when reset is called $resetcycles = $CmdLine[2]; number of cycles before reset $cycletime = $CmdLine[3]; cycle length in milliseconds Dim $time1; is the initial value to compare against Dim $time2; value sampled each idle cycle $isidle = 0;0=not idle last check 1=idle last check $idlecycle = 0; number of cycles(10 seconds) idle. 18=reset First() Func First() $time1 = MouseGetPos();get initial position of mouse ;MsgBox(0, "time1", $time1[0] & " and " & $time1[1], 2) Start() EndFunc Func Start() Sleep($cycletime) $time2 = MouseGetPos(); get second position of mouse ;MsgBox(0, "time2", $time2[0] & " and " & $time2[1], 2) Compare() EndFunc Func Compare() If $time1[0] <> $time2[0] OR $time1[1] <> $time2[1] Then $isidle = 0 $idlecycle = 0 $time1 = 0 $time2 = 0 ;MsgBox(0, "not idle", "We're not idle in Compare Stage 1", 2) First() ElseIf $time1[0] = $time2[0] AND $time1[1] = $time2[1] Then If $idlecycle >= $resetcycles Then $isidle = 1 ;MsgBox(0, "idle, going to reset", "we're going to reset!", 2) Reset() Else $idlecycle = $idlecycle + 1 $isidle = 1 $time2 = 0 ;MsgBox(0, "idle, ticking +1", "idle for " & $idlecycle & " cycles", 2) Start() EndIf EndIf EndFunc Func Reset() ;MsgBox(0, "Running the reset!", "woot, we're resetting because we've been idle 3 minutes") Run($resetrunprogram) $isidle = 0 $idlecycle = 0 $time1 = 0 $time2 = 0 First() EndFunc Thanks in advance! Edited July 15, 2004 by Methos Link to comment Share on other sites More sharing options...
Developers Jos Posted July 15, 2004 Developers Share Posted July 15, 2004 (edited) I got an error in a script i was writing saying i've reached the max recursion level. Is there a way to set this to infinite? This is supposed to be an endless loop. Heres my script: Thanks in advance!There is a difference between a indefinate loop and indefinate recursion. None of your calls to Func's ever end ... they keep on calling each other. Just let them end with a return code and act on that.... I hope this clearifies it a bit ...... expandcollapse popup; shortcut/cmdline example: C:\idletest.exe "C:\example\example.exe" 18 10000 ;getting the data from the command line $RESETRUNPROGRAM = $CMDLINE[1];command to run when reset is called $RESETCYCLES = $CMDLINE[2]; number of cycles before reset $CYCLETIME = $CMDLINE[3]; cycle length in milliseconds Dim $TIME1; is the initial value to compare against Dim $TIME2; value sampled each idle cycle $ISIDLE = 0;0=not idle last check 1=idle last check $IDLECYCLE = 0; number of cycles(10 seconds) idle. 18=reset First() Func First() $TIME1 = MouseGetPos();get initial position of mouse ;MsgBox(0, "time1", $time1[0] & " and " & $time1[1], 2) Start() EndFunc ;==>First Func Start() Sleep($CYCLETIME) $TIME2 = MouseGetPos(); get second position of mouse ;MsgBox(0, "time2", $time2[0] & " and " & $time2[1], 2) If Compare() then Return EndFunc ;==>Start Func Compare() If $TIME1[0] <> $TIME2[0] Or $TIME1[1] <> $TIME2[1] Then $ISIDLE = 0 $IDLECYCLE = 0 $TIME1 = 0 $TIME2 = 0 ;MsgBox(0, "not idle", "We're not idle in Compare Stage 1", 2) ;First() return 1 ElseIf $TIME1[0] = $TIME2[0] And $TIME1[1] = $TIME2[1] Then If $IDLECYCLE >= $RESETCYCLES Then $ISIDLE = 1 ;MsgBox(0, "idle, going to reset", "we're going to reset!", 2) Reset() Return 1 Else $IDLECYCLE = $IDLECYCLE + 1 $ISIDLE = 1 $TIME2 = 0 ;MsgBox(0, "idle, ticking +1", "idle for " & $idlecycle & " cycles", 2) return 0 ;Start() EndIf EndIf EndFunc ;==>Compare Func Reset() ;MsgBox(0, "Running the reset!", "woot, we're resetting because we've been idle 3 minutes") Run($RESETRUNPROGRAM) $ISIDLE = 0 $IDLECYCLE = 0 $TIME1 = 0 $TIME2 = 0 EndFunc ;==>Reset Edited July 15, 2004 by JdeB SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Methos Posted July 15, 2004 Author Share Posted July 15, 2004 Yeah, that definately helps. Now lets see if I can put it all togeather right. Thanks! Link to comment Share on other sites More sharing options...
Developers Jos Posted July 15, 2004 Developers Share Posted July 15, 2004 Yeah, that definately helps. Now lets see if I can put it all togeather right. Thanks!just modified my post ... it includes also the reset()... think this should do it... SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Methos Posted July 15, 2004 Author Share Posted July 15, 2004 Cool, heres what im testing now. expandcollapse popup;C:\idletest.exe "C:\windows\tutorial\blah.exe" 18 10000 ;getting the data from the command line $RESETRUNPROGRAM = $CmdLine[1] $RESETCYCLES = $CmdLine[2] $CYCLETIME = $CmdLine[3] Dim $TIME1; is the initial value to compare against Dim $TIME2; value sampled each idle cycle $ISIDLE = 0;0=not idle last check 1=idle last check $IDLECYCLE = 0; number of cycles(10 seconds) idle. 18=reset While 1 = 1 First() Wend Func First() $TIME1 = MouseGetPos();get initial position of mouse If Start() then Reset() EndFunc ;==>First Func Start() Sleep($CYCLETIME) $TIME2 = MouseGetPos(); get second position of mouse If Compare() then Return 1 EndFunc ;==>Start Func Compare() If $TIME1[0] <> $TIME2[0] Or $TIME1[1] <> $TIME2[1] Then $ISIDLE = 0 $IDLECYCLE = 0 $TIME1 = 0 $TIME2 = 0 return 0 ElseIf $TIME1[0] = $TIME2[0] And $TIME1[1] = $TIME2[1] Then If $IDLECYCLE >= $RESETCYCLES Then $ISIDLE = 1 return 1 Else $IDLECYCLE = $IDLECYCLE + 1 $ISIDLE = 1 $TIME2 = 0 return 0 EndIf EndIf EndFunc ;==>Compare Func Reset() Run($RESETRUNPROGRAM) $ISIDLE = 0 $IDLECYCLE = 0 $TIME1 = 0 $TIME2 = 0 EndFunc Thanks for the help again! 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