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