In CJs example reducing the priority of the process is probably the best solution.However, sometimes you do want to (politely) give up CPU cycles because you don't need them. There are two reasons for this:
1) You are waiting on an event
I've got a set of UDF's for enhanced keyboard input. There is a loop which waits for a keypress, and as there is no way of giving up CPU cycles this incredibly tight little loop uses huge amounts of CPU it doesn't need. This is bad enough on a single user machine, but can be fatal on a multi-user platform like Windows Terminal Server.
2) Process scheduling
I don't know about MS Windows so much, but operating systems like Unix have a scheduler to deal with running process. The timeslice given to a running process varies depending on how busy the process has been in the past. The scheduler (not unreasonably) will give CPU hungry processes a larger processor timeslice, to the detriment of other processes, i.e. their share of the resources will degrade.
For this reason it used to be common for programmers to give up their timeslice (quorum? - can't remember) in batch type programs to ensure that the program would not hog the CPU.
One way to guarantee sleeping in milliseconds is to have your friends staying over with their new baby...