The boolean would work if the thread is looping around and not actually waiting.
I would do a WaitForMultipleObjects instead of the WaitForSingleObject in you waiting threads and create the special mutex or a semaphore to wait for so that the thread that receives input first can set the boolean...