Both methods have their strengths and weaknesses.
Mines strengths are that there is no limit on functions running, and it can return multiple values.
Mines weaknesses is the timing "fuzz" of using a single return ID at a time.
Nicotins strengths are simplicity of code(assuming it works), and accuracy of timeing.
Nicotins waknesses are heavier memory consumption, and the need to KNOW the maximum number of functions.
Maybe you can find a way to merge the two... use the best of both.
I'd be interested in seeing the result.