English
Instant Developer Foundation Documentazione
  • Reference Librerie
  • Libreria Client
  • Libreria Servizi

Sleep

procedura copia link

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

Applicazione Servizio.Sleep(numero secondi)

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

Vedi Anche

  • Shell (procedura)

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum