Лучше вынести в отдельный поток. Например
void __fastcall TTimerThread::Execute() {
const TDateTime DTEvent = EncodeTime(20, 0, 0, 0);
bool First=true;
while(!Terminated) {
while(First && (CompareTime(Time(), DTEvent)==LessThanValue) && !Terminated) {
First = false;
Sleep(1000);
}
// ...выполнение события...
for(long i=0l; (i3600l*24l && !Terminated); ++i) Sleep(1000);
}
}