Thanks for the answer.
I did some testing and using a timer callback instead of Delay gives much less CPU overhead for periods in the range 10ms - 100ms (timer callbacks also gives more accurate periods in the range 2ms - 100ms).
However the only way I know to use timer callbacks is by calling RunUserInterface () which is a very bad idea in a generic Dll since it's a "Global" function, it affects the caller(s) of the Dll.
(E.g. if the user of a Dll assumes that his GUI will be "locked out" during the call, unless he specifically calls the Dll in a new thread, he will get a nasty surprise when calling a Dll that uses timer callbacks to control it's loops.)