10039db0dSBarry 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 182fe279fdSBarry Smith Input Parameter: 19e5c89e4eSSatish Balay . s - number of seconds to sleep 20e5c89e4eSSatish Balay 21667f096bSBarry Smith Level: intermediate 22667f096bSBarry Smith 23811af0c4SBarry Smith Note: 24*10450e9eSJacob Faibussowitsch If `s` is negative waits for keyboard input 25e5c89e4eSSatish Balay 26*10450e9eSJacob Faibussowitsch .seealso: `PetscTime()` 27e5c89e4eSSatish Balay @*/ PetscSleep(PetscReal s)28d71ae5a4SJacob FaibussowitschPetscErrorCode PetscSleep(PetscReal s) 29d71ae5a4SJacob Faibussowitsch { 30e5c89e4eSSatish Balay PetscFunctionBegin; 31e5c89e4eSSatish Balay if (s < 0) getc(stdin); 32a6d0e24fSJed Brown 33a6d0e24fSJed 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. */ 34a6d0e24fSJed Brown #if defined(PETSC_HAVE_NANOSLEEP) 35a6d0e24fSJed Brown else if (s < 1) { 36a6d0e24fSJed Brown struct timespec rq; 37a6d0e24fSJed Brown rq.tv_sec = 0; 38a6d0e24fSJed Brown rq.tv_nsec = (long)(s * 1e9); 3902c9f0b5SLisandro Dalcin nanosleep(&rq, NULL); 40a6d0e24fSJed Brown } 41a6d0e24fSJed Brown #elif defined(PETSC_HAVE_USLEEP) 42a6d0e24fSJed Brown /* POSIX.1-2001 deprecates this in favor of nanosleep because nanosleep defines interaction with signals */ 43a6d0e24fSJed Brown else if (s < 1) usleep((unsigned int)(s * 1e6)); 44a6d0e24fSJed Brown #endif 45a6d0e24fSJed Brown 46e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SLEEP) 479371c9d4SSatish Balay else 489371c9d4SSatish Balay sleep((int)s); 49e5c89e4eSSatish Balay #elif defined(PETSC_HAVE__SLEEP) && defined(PETSC_HAVE__SLEEP_MILISEC) 50a6d0e24fSJed Brown else _sleep((int)(s * 1000)); 51e5c89e4eSSatish Balay #elif defined(PETSC_HAVE__SLEEP) 52a6d0e24fSJed Brown else _sleep((int)s); 53e5c89e4eSSatish Balay #else 54fa6b8e38SSatish Balay SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP_SYS, "No support for sleep() on this machine"); 55e5c89e4eSSatish Balay #endif 563ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 57e5c89e4eSSatish Balay } 58