1e5c89e4eSSatish Balay #define PETSC_DLL 2e5c89e4eSSatish Balay 3e5c89e4eSSatish Balay #include "petsc.h" /*I "petsc.h" I*/ 4e5c89e4eSSatish Balay #if defined (PETSC_HAVE_UNISTD_H) 5e5c89e4eSSatish Balay #include <unistd.h> 6e5c89e4eSSatish Balay #endif 7e5c89e4eSSatish Balay #if defined (PETSC_HAVE_STDLIB_H) 8e5c89e4eSSatish Balay #include <stdlib.h> 9e5c89e4eSSatish Balay #endif 10e5c89e4eSSatish Balay #if defined (PETSC_HAVE_DOS_H) /* borland */ 11e5c89e4eSSatish Balay #include <dos.h> 12e5c89e4eSSatish Balay #endif 13*a6d0e24fSJed Brown #if defined (PETSC_HAVE_TIME_H) 14*a6d0e24fSJed Brown #include <time.h> 15*a6d0e24fSJed Brown #endif 16e5c89e4eSSatish Balay #include "petscfix.h" 17e5c89e4eSSatish Balay 18e5c89e4eSSatish Balay #undef __FUNCT__ 19e5c89e4eSSatish Balay #define __FUNCT__ "PetscSleep" 20e5c89e4eSSatish Balay /*@ 21e5c89e4eSSatish Balay PetscSleep - Sleeps some number of seconds. 22e5c89e4eSSatish Balay 23e5c89e4eSSatish Balay Not Collective 24e5c89e4eSSatish Balay 25e5c89e4eSSatish Balay Input Parameters: 26e5c89e4eSSatish Balay . s - number of seconds to sleep 27e5c89e4eSSatish Balay 28e5c89e4eSSatish Balay Notes: 29e5c89e4eSSatish Balay If s is negative waits for keyboard input 30e5c89e4eSSatish Balay 31e5c89e4eSSatish Balay Level: intermediate 32e5c89e4eSSatish Balay 33e5c89e4eSSatish Balay Concepts: sleeping 34e5c89e4eSSatish Balay Concepts: pause 35e5c89e4eSSatish Balay Concepts: waiting 36e5c89e4eSSatish Balay 37e5c89e4eSSatish Balay @*/ 38*a6d0e24fSJed Brown PetscErrorCode PETSC_DLLEXPORT PetscSleep(PetscReal s) 39e5c89e4eSSatish Balay { 40e5c89e4eSSatish Balay PetscFunctionBegin; 41e5c89e4eSSatish Balay if (s < 0) getc(stdin); 42*a6d0e24fSJed Brown 43*a6d0e24fSJed Brown /* Some systems consider it an error to call nanosleep or usleep for more than one second so we only use them for subsecond sleeps. */ 44*a6d0e24fSJed Brown #if defined (PETSC_HAVE_NANOSLEEP) 45*a6d0e24fSJed Brown else if (s < 1) { 46*a6d0e24fSJed Brown struct timespec rq; 47*a6d0e24fSJed Brown rq.tv_sec = 0; 48*a6d0e24fSJed Brown rq.tv_nsec = (long)(s*1e9); 49*a6d0e24fSJed Brown nanosleep(&rq,0); 50*a6d0e24fSJed Brown } 51*a6d0e24fSJed Brown #elif defined (PETSC_HAVE_USLEEP) 52*a6d0e24fSJed Brown /* POSIX.1-2001 deprecates this in favor of nanosleep because nanosleep defines interaction with signals */ 53*a6d0e24fSJed Brown else if (s < 1) usleep((unsigned int)(s*1e6)); 54*a6d0e24fSJed Brown #endif 55*a6d0e24fSJed Brown 56e5c89e4eSSatish Balay #if defined (PETSC_HAVE_SLEEP) 57*a6d0e24fSJed Brown else sleep((int)s); 58e5c89e4eSSatish Balay #elif defined (PETSC_HAVE__SLEEP) && defined(PETSC_HAVE__SLEEP_MILISEC) 59*a6d0e24fSJed Brown else _sleep((int)(s*1000)); 60e5c89e4eSSatish Balay #elif defined (PETSC_HAVE__SLEEP) 61*a6d0e24fSJed Brown else _sleep((int)s); 62e5c89e4eSSatish Balay #else 63b98bf947SSatish Balay SETERRQ(PETSC_ERR_SUP_SYS,"No support for sleep() on this machine") 64e5c89e4eSSatish Balay #endif 65e5c89e4eSSatish Balay PetscFunctionReturn(0); 66e5c89e4eSSatish Balay } 67e5c89e4eSSatish Balay 68