Versuch' mal statt einem Sleep:
Delphi-Quellcode:
WaitForSingleObject(self.Handle
{handle of object to wait for},
30000
{time-out interval in milliseconds } );
Gegebenfalls musst du noch das Result von WaitForSingleObject auswerten und mit WAIT_TIMEOUT vergleichen.