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