Does everybody do this or something similar?
I dont.What I do (like Grey and Alex), is have auto call timers, (Normaly at screen frequency or a denominator of such for display), that call the game logic/display and such automaticaly. These then do their stuff and when finished pass control back to the normal message loop. I do this so that I dont have to worry to much about sync. Ok I have to make sure that any task that is auto called is short enough to do its stuff and return control back within a few milli, but it works OK, and "Looks" like multi thread/tasks because the logic (say), works independantly of the display.
http://www.blitzbasic.com/codearcs/codearcs.php?code=1721
In the message loop the While WaitEvent() probably has the same effect as the delay