Delphi-Quellcode:
...
var lTick:LONGINT;
begin
...
lTick:=GetTickCount;
repeat
Application.ProcessMessages;
until (GetTickCount-lTick>=12*3600*1000);
...
Zur Erklärung: GetTickCount-lTick liefert eine Differenz in Millisekunden der vergangenen Zeit, seitdem lTick auf GetTickCount zugewiesen wurde. Nun läuft die Schleife einfach solange, bis 12 Stunden * 3600 Sekunden je Stunde * 1000 Millisekunden je Sekunde abgelaufen ist - deswegen das Produkt.
ProcessMessages sorgt dafür, dass das Programm derweil alle Fensternachrichten problemlos weiterreicht und verarbeitet.