Internally, the wait component uses WaitForMultipleObjects to wait for the registered objects, and is bound by any limitations that already exist for this function. One such limitation is the inability to wait for a single handle multiple times. So if you want to register a single object multiple times, you must call DuplicateHandle and register the original handle and the duplicated handle individually. Of course, WaitForMultipleObjects is waiting for any one of the objects to be signaled versus waiting for all of the objects to be signaled. For those of you familiar with WaitForMultipleObjects, you know that it can only wait on at most 64 (MAXIMUM_WAIT_OBJECTS) objects at one time. So, what happens if you register more than 64 objects with RegisterWaitForSingleObject? The answer is that the wait component adds another thread that also calls WaitForMultipleObjects. In reality, every 63 objects require that another thread be added to this component because the threads need to also wait on a waitable timer object, which controls the timeouts.