yo tambien utilizo el sleep para dormir la aplicacion... ten en cuenta que el parametro que va en su interior está en milisegundos... asi que para el bucle se detenga durante un segundo tendrías que poner:
sleep(1000)...
Bien, si lo que quieres es que el bucle se detenga pero que el programa en general no se bloquee podrías poner esto dentro del bucle:
Application->ProcessMessages();
Es una solución un poco penosa, pero bueno, mejor que nada...por si no me explicao bien, voy a volver a explicarlo: con el sleep se bloquea el hilo de tu programa...y si en ese tiempo quisieras pulsar , por ejemplo un boton, no podrías porque el hilo está dormido...pero si pones esa instrucción dentro del bucle...lo que se duerme solo es el bucle...y tu podrías hacer lo que quisieras con tu programa...más o menos asi funciona...ok?