Вы хотите использовать функцию CreateTimerQueueTimer () . Вот MSDN пример кода .
Если вам нужно что-то, работающее на старых платформах, вы застряли с SetTimer () , который доставляет сообщение WM_TIMER вашему WNDPROC. Это довольно ужасный API, поэтому я действительно рекомендую использовать функцию Timer Queue.
CreateTimerQueueTimer () создаст рабочий поток, который вычисляет, сколько времени прошло, а затем перезвонит вам, когда он появится. Это может привести к многопоточности, но в целом это намного приятнее, особенно если вы не хотите иметь окно.