Unless some external event can signal your process directly, sleep() is about as efficient as it gets. You should tune your sleep durations to be as long as acceptable, but really, the CPU won't waste the effort to give your process a second thought until the sleeping time elapses. (Sleep is NOT equivalent to 1 while (time < wakeup);)