Ежели проектируешь интерфейс к чему-то асинхронному:
Do: Высунь из него что-нибудь, что клиент твоего интерфейса сможет засунуть в WaitForMultipleObjects и сам разобраться со своим blocking behavior.
Don't: Не пытайся сам предоставлять сервис Wait-функций со значениями таймаутов, отличными от 0 и INFINITE.
Примечание к Don't: Твоя реализация может делать Wait несколько раз. И где в таком случае окажешься ты с заказанным тебе таймаутом в две секунды?
Общее примечание: Пардон за произнесение вслух банальностей.