Quiza quedaria mejor parametrizando la espera de hb_idleSleep() o calculandola en funcion de la parte decimal de los segundos a esperar (nSeconds), pero de momento, asi quedaria:
#Define dBASE_ CToD("01/01/1980")
#Define nTRANSCURRIDO_ (Date()- dBASE_)* 86400+ Seconds()
// nSeconds puede ser un entero o llevar hasta dos decimales
// bCodeblock es opcional y devolvera .T. para terminar la espera
FUNCTION SleepOrTrue( nSeconds, bCodeblock )
LOCAL nStartSeconds, nCurrentSeconds, nWaitedSeconds
nStartSeconds := nTRANSCURRIDO_
nWaitedSeconds := 0
DO WHILE nWaitedSeconds < nSeconds .AND. If(bCodeBlock == NIL, .T., !Eval( bCodeblock ))
nCurrentSeconds := nTRANSCURRIDO_