Scopo
Sospende l'esecuzione del servizio per il tempo indicato. Normalmente questa procedura viene utilizzata quando si desidera attendere un certo tempo senza far nulla e questo può essere utile, ad esempio, se si utilizza il comando Shell. Tale comando può avviare un altro programma ma non aspetta che esso termini l'esecuzione. Se si desidera aspettare che un processo avviato tramite il comando Shell sia terminato si può utilizzare il codice mostrato nell'esempio: qui la procedura Sleep è utilizzata per aspettare che il processo avviato da una chiamata al comando Shell sia terminato.
Sintassi
Argomenti
Numero Secondi | E' un numero intero che indica per quanti secondi occorre aspettare |
Note
- Se si desidera attendere un certo tempo senza far nulla è meglio utilizzare questa procedura invece di fare un ciclo WHILE per il termpo richiesto. La procedura Sleep, infatti, fa si che il sistema non utilizzi la CPU del computer per l'applicazione durante l'attesa.
Esempio di codice
// Esegue il batch COMPRIMI.BAT e attende il suo completamento. Torna TRUE se
// tutto è OK
// ****************************************************************************
public boolean Servizio.EseguiBATCH()
{
int LockFileId = 0 //
date time InizioTimeout = #1899/12/30 00:00:00# //
//
try
{
// Per cominciare elimino il file creato dal batch al termine della sua
// esecuzione
Servizio.DeleteFile(Path() +c \ +c Lock.lck)
}
//
// Ora eseguo il comando
Servizio.Shell(Path() +c \ +c COMPRIMI.BAT)
//
// Prendo un FileID libero
LockFileId := FreeFile()
//
// Ora aspetto di veder apparire il file Lock.lck creato dal batch al termine
// della sua esecuzione. Non aspetto all'infinito ma per un massimo di 5
// minuti
InizioTimeout := Now()
while (Now() -d InizioTimeout) * 24 * 60 < 5
{
try
{
Servizio.OpenFileForInput(Path() +c \ +c Lock.lck, LockFileId)
//
// Esiste!!! Allora ho finito. Lo chiudo ed esco
Servizio.CloseFile(LockFileId)
//
return True
}
catch // Il file Lock.lck non esiste ancora... dormo per 3 secondi...
{
Servizio.Sleep(3)
}
}
//
// Nulla da fare... il batch non è terminato entro 5 minuti!
return False
}
In questo esempio si usa la procedura Sleep per attendere che appaia un determinato file "semaforo" nel file system che indica il termine di un altro processo lanciato in modo asincrono.
Ultima modifica: 23/03/2021 / Validità: da 6.5.2680