Actual source code: psleep.c

  1: #define PETSC_DLL

 3:  #include petscsys.h
  4: #if defined (PETSC_HAVE_UNISTD_H)
  5: #include <unistd.h>
  6: #endif
  7: #if defined (PETSC_HAVE_STDLIB_H)
  8: #include <stdlib.h>
  9: #endif
 10: #if defined (PETSC_HAVE_DOS_H)   /* borland */
 11: #include <dos.h>
 12: #endif
 13: #if defined (PETSC_HAVE_TIME_H)
 14: #include <time.h>
 15: #endif

 19: /*@
 20:    PetscSleep - Sleeps some number of seconds.

 22:    Not Collective

 24:    Input Parameters:
 25: .  s - number of seconds to sleep

 27:    Notes:
 28:       If s is negative waits for keyboard input

 30:    Level: intermediate

 32:    Concepts: sleeping
 33:    Concepts: pause
 34:    Concepts: waiting

 36: @*/
 37: PetscErrorCode  PetscSleep(PetscReal s)
 38: {
 40:   if (s < 0) getc(stdin);

 42:   /* Some systems consider it an error to call nanosleep or usleep for more than one second so we only use them for subsecond sleeps. */
 43: #if defined (PETSC_HAVE_NANOSLEEP)
 44:   else if (s < 1) {
 45:     struct timespec rq;
 46:     rq.tv_sec = 0;
 47:     rq.tv_nsec = (long)(s*1e9);
 48:     nanosleep(&rq,0);
 49:   }
 50: #elif defined (PETSC_HAVE_USLEEP)
 51:   /* POSIX.1-2001 deprecates this in favor of nanosleep because nanosleep defines interaction with signals */
 52:   else if (s < 1) usleep((unsigned int)(s*1e6));
 53: #endif

 55: #if defined (PETSC_HAVE_SLEEP)
 56:   else       sleep((int)s);
 57: #elif defined (PETSC_HAVE__SLEEP) && defined(PETSC_HAVE__SLEEP_MILISEC)
 58:   else       _sleep((int)(s*1000));
 59: #elif defined (PETSC_HAVE__SLEEP)
 60:   else       _sleep((int)s);
 61: #else
 62:   SETERRQ(PETSC_ERR_SUP_SYS,"No support for sleep() on this machine")
 63: #endif
 64:   return(0);
 65: }