Yield in a Cocoa while loop

I'm trying to rework the event handling mechanism in my engine, with the goal of getting it to stop hog 100% CPU when it can. I realize that I should be on a timer, but due to the way its Win port works and the general structure of the engine, this isn't likely to happen anytime now.

I need to enter a function and not return until the application is ready to quit. Right now I do this by trapping myself in a while loop calling

Unfortunately, this burns through cycles like nothing else since the main thread never yields to other apps. One simple solution would be to add an explicit yield for a fraction of a second after each rendered frame, but I haven't found a way to make Cocoa suspend itself. So, my primary question is if there's a simple, overlooked way to make the run loop run and yield? Would calling runUntilDate: "now + 1/60th second" actually suspend the thread for a while?

Another solution would be to lock myself into a new run loop with a timer that calls my update function at the desired interval - does this sound possible and desirable?

Wow, those are some cool ideas - I have to experiment with them to see what works. Just one question to Keith: I am vsynching, but that only seems to synch the actual page flip to the retrace, not actually block on it? I had hoped for VBL blocking, but since it doesn't seem to take, I started to look for run loop solutions...