The question: How to get a proper "relax and let things go" loop written that doesn't appear to consume 99% CPU in Task Manager when it's idle.
Use the API command Sleep together with Doevents.

Put this in a module:
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Then you can make a loop like this:
Do
Sleep 1
DoEvents
Loop
This gives execution back to windows for 1 millisecond, then returns to your program to do a DoEvents command. Task manager will show your program as using 0% cpu.