Actual source code: psleep.c
1: #define PETSC_DESIRE_FEATURE_TEST_MACROS /* for usleep() */
2: #include <petscsys.h>
3: #if defined(PETSC_HAVE_UNISTD_H)
4: #include <unistd.h>
5: #endif
6: #if defined(PETSC_HAVE_DOS_H) /* borland */
7: #include <dos.h>
8: #endif
9: #if defined(PETSC_HAVE_TIME_H)
10: #include <time.h>
11: #endif
13: /*@
14: PetscSleep - Sleeps some number of seconds.
16: Not Collective
18: Input Parameter:
19: . s - number of seconds to sleep
21: Level: intermediate
23: Note:
24: If `s` is negative waits for keyboard input
26: .seealso: `PetscTime()`
27: @*/
28: PetscErrorCode PetscSleep(PetscReal s)
29: {
30: PetscFunctionBegin;
31: if (s < 0) getc(stdin);
33: /* Some systems consider it an error to call nanosleep or usleep for more than one second so we only use them for subsecond sleeps. */
34: #if defined(PETSC_HAVE_NANOSLEEP)
35: else if (s < 1) {
36: struct timespec rq;
37: rq.tv_sec = 0;
38: rq.tv_nsec = (long)(s * 1e9);
39: nanosleep(&rq, NULL);
40: }
41: #elif defined(PETSC_HAVE_USLEEP)
42: /* POSIX.1-2001 deprecates this in favor of nanosleep because nanosleep defines interaction with signals */
43: else if (s < 1) usleep((unsigned int)(s * 1e6));
44: #endif
46: #if defined(PETSC_HAVE_SLEEP)
47: else
48: sleep((int)s);
49: #elif defined(PETSC_HAVE__SLEEP) && defined(PETSC_HAVE__SLEEP_MILISEC)
50: else _sleep((int)(s * 1000));
51: #elif defined(PETSC_HAVE__SLEEP)
52: else _sleep((int)s);
53: #else
54: SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP_SYS, "No support for sleep() on this machine");
55: #endif
56: PetscFunctionReturn(PETSC_SUCCESS);
57: }