dlee Posted January 10, 2009 Share Posted January 10, 2009 Hi, so i'm trying to create a front end script which will stay idle most of the time. I've included an option to toggle certain hotkeys in my script using the tray: while 1 $msg = TrayGetMsg() Select Case $msg = $tray[0] $toggle[0] = Not $toggle[0] if $toggle[0] Then $tHot = "tHot" else $tHot = "tOff" EndIf Case $msg = $tray[1] $toggle[1] = Not $toggle[1] if $toggle[1] Then $yHot = "yHot" else $yHot = "yOff" EndIf Case $msg = $tray[2] $toggle[2] = Not $toggle[2] if $toggle[2] Then $hHot = "hHot" else $hHot = "hOff" EndIf EndSelect WEnd I also have another infinite loop that I want to process at the same time; this one calls PixelGetColor and WinActive among other functions. so the Tray loop is running as fast as possible, while the second loop is running with 3 seconds between each iteration. Since these two have different time frames (the first one "infinitely fast", the second 3000ms) i'm having trouble combining the two. I've tried using a timer for the second loop, but it doesn't seem to be working for me: $hGUI = WinGetHandle(AutoItWinGetTitle()) $timer = _Timer_SetTimer($hGUI, 5000, "check") func check() ... EndFunc I want this script to be as lightweight as possible during its idle time. So my question is how do i combine two infinite loops with different timings without losing too much efficiency? i was thinking of using TimerInit and TimerDiff, but is running TimerDiff at max looping speed going to affect performance? And if I have the choice between a Timer and one loop, which one would be more efficient? any help would be appreciated. Link to comment Share on other sites More sharing options...
PsaltyDS Posted January 10, 2009 Share Posted January 10, 2009 (edited) There have been other solutions posted, but here is at least one using a simple 2D array. _Func0() is repeated as quickly as possible. _Func1() run every time the AdLib runs because the timer is set to zero. _Func2() runs every three seconds. _Func3() runs every one minute. The AdLibEnable() function is set to check the other functions twice per second (every 500ms), keeping those functions from taking too much CPU time from the rest of the script. ; Array of timers: ; [0][0] = count ; [n][0] = func to call ; [n][1] = time to next run (in millisec) ; [n][2] = timer value $avTimers[4][3] = [[3, ""], _ ["_Func1", 0, TimerInit()], _ ["_Func2", 3000, TimerInit()], _ ["_Func3", 60000, TimerInit()]] AdlibEnable("_CheckTimers", 500) While 1 _Func0(); Repeat a quickly as possible WEnd Func _CheckTimers() For $n = 1 To $avTimers[0][0] If TimerDiff($avTimers[$n][2]) < $avTimers[$n][1] Then ContinueLoop $avTimers[$n][2] = TimerInit() Call($avTimers[$n][0]) Next EndFunc Edited January 10, 2009 by PsaltyDS Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law 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