I've personally started using multi-threading. I have a thread for object updates, a thread for objects collision and a thread for drawing. Each thread loops with a while (GetMessage())
and threads send messages from one to another.
At each cycle (frame), my main loop sends a message to each thread to:
- Calculate collision for modified objects
- Update objects (movement, state etc.)
- Draw the updated objects
That's how I do it (at least on my GDI/GDI+ games). Not sure if the best way, but so far it works like a charm :).