I am sure that the method quoted will always result in recursion.
Before the processor enters another sub it will store all local variables to the stack, so that it can reload them when it exits the sub. This looks like infinite recursion. I dont think it is suitable for your problem.
You might as well use a Do...Loop with DoEvents instead.
I therefore return to my original question, how to 'synchronise' a timer in the above example so that it runs out at the correct time and also allows screen touches to be immediately detected. If that is a stupid question please point me to an explanation of how such a system should work.
Many thanks.
How variable is the duration of your subs? I do not see any issue with using timers, why do you think you need to synchronise it to time out?
With a timer, you just add your 3 subs in there.
In order to set the Timer.Interval, you need to make sure the interval is large enough to do all the work you want it to. So it should be the worst-case duration of your subs.
In the case that the timer is unable to complete the work in that duration, I think the Timer_Tick message will get queued up, so it will happen after the last one is completed. Therefore your process will run as fast as possible without losing responsiveness.
EDIT: Just saw agrahams reply, which is thankfully consistent with mine