rewrite the concurrency model.
This guy is spawning threads, and telling them to do something after a certain amount of time has passed. So he spins, and checks to see if a enough time has passed. He wastes CPU cycles for the spin logic, plus the repeated system calls.
In the old days we called this a "busy wait". My mentor wanted to smack the shit out of me after he saw I coded one.
THIS IS A MULTI-USER MULTI-TASKING SYSTEM, DAMMIT. Other people want to use those cycles you are chewing through. Find another way!
It depends on how long each process needs to wait for which signalling mechanism he needs to use (alarm, microsecond sleeps, semaphore or pipe read wake-ups, etc (there's lots)).
So talk to the coder.