1*0039db0dSBarry Smith #define PETSC_DESIRE_FEATURE_TEST_MACROS /* for usleep() */ 2c6db04a5SJed Brown #include <petscsys.h> /*I "petscsys.h" I*/ 3e5c89e4eSSatish Balay #if defined(PETSC_HAVE_UNISTD_H) 4e5c89e4eSSatish Balay #include <unistd.h> 5e5c89e4eSSatish Balay #endif 6e5c89e4eSSatish Balay #if defined(PETSC_HAVE_DOS_H) /* borland */ 7e5c89e4eSSatish Balay #include <dos.h> 8e5c89e4eSSatish Balay #endif 9a6d0e24fSJed Brown #if defined(PETSC_HAVE_TIME_H) 10a6d0e24fSJed Brown #include <time.h> 11a6d0e24fSJed Brown #endif 12e5c89e4eSSatish Balay 13e5c89e4eSSatish Balay /*@ 14e5c89e4eSSatish Balay PetscSleep - Sleeps some number of seconds. 15e5c89e4eSSatish Balay 16e5c89e4eSSatish Balay Not Collective 17e5c89e4eSSatish Balay 18e5c89e4eSSatish Balay Input Parameters: 19e5c89e4eSSatish Balay . s - number of seconds to sleep 20e5c89e4eSSatish Balay 21e5c89e4eSSatish Balay Notes: 22e5c89e4eSSatish Balay If s is negative waits for keyboard input 23e5c89e4eSSatish Balay 24e5c89e4eSSatish Balay Level: intermediate 25e5c89e4eSSatish Balay 26e5c89e4eSSatish Balay Concepts: sleeping 27e5c89e4eSSatish Balay Concepts: pause 28e5c89e4eSSatish Balay Concepts: waiting 29e5c89e4eSSatish Balay 30e5c89e4eSSatish Balay @*/ 317087cfbeSBarry Smith PetscErrorCode PetscSleep(PetscReal s) 32e5c89e4eSSatish Balay { 33e5c89e4eSSatish Balay PetscFunctionBegin; 34e5c89e4eSSatish Balay if (s < 0) getc(stdin); 35a6d0e24fSJed Brown 36a6d0e24fSJed 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. */ 37a6d0e24fSJed Brown #if defined(PETSC_HAVE_NANOSLEEP) 38a6d0e24fSJed Brown else if (s < 1) { 39a6d0e24fSJed Brown struct timespec rq; 40a6d0e24fSJed Brown rq.tv_sec = 0; 41a6d0e24fSJed Brown rq.tv_nsec = (long)(s*1e9); 42a6d0e24fSJed Brown nanosleep(&rq,0); 43a6d0e24fSJed Brown } 44a6d0e24fSJed Brown #elif defined(PETSC_HAVE_USLEEP) 45a6d0e24fSJed Brown /* POSIX.1-2001 deprecates this in favor of nanosleep because nanosleep defines interaction with signals */ 46a6d0e24fSJed Brown else if (s < 1) usleep((unsigned int)(s*1e6)); 47a6d0e24fSJed Brown #endif 48a6d0e24fSJed Brown 49e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SLEEP) 50a6d0e24fSJed Brown else sleep((int)s); 51e5c89e4eSSatish Balay #elif defined(PETSC_HAVE__SLEEP) && defined(PETSC_HAVE__SLEEP_MILISEC) 52a6d0e24fSJed Brown else _sleep((int)(s*1000)); 53e5c89e4eSSatish Balay #elif defined(PETSC_HAVE__SLEEP) 54a6d0e24fSJed Brown else _sleep((int)s); 55e5c89e4eSSatish Balay #else 56fa6b8e38SSatish Balay SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP_SYS,"No support for sleep() on this machine"); 57e5c89e4eSSatish Balay #endif 58e5c89e4eSSatish Balay PetscFunctionReturn(0); 59e5c89e4eSSatish Balay } 60e5c89e4eSSatish Balay 61