xref: /petsc/src/sys/utils/psleep.c (revision f37c82fbca2ef2d9869799d3305350a5f272bd86)
1 
2 #include <petscsys.h>                 /*I   "petscsys.h"    I*/
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
12 
13 #undef __FUNCT__
14 #define __FUNCT__ "PetscSleep"
15 /*@
16    PetscSleep - Sleeps some number of seconds.
17 
18    Not Collective
19 
20    Input Parameters:
21 .  s - number of seconds to sleep
22 
23    Notes:
24       If s is negative waits for keyboard input
25 
26    Level: intermediate
27 
28    Concepts: sleeping
29    Concepts: pause
30    Concepts: waiting
31 
32 @*/
33 PetscErrorCode  PetscSleep(PetscReal s)
34 {
35   PetscFunctionBegin;
36   if (s < 0) getc(stdin);
37 
38   /* Some systems consider it an error to call nanosleep or usleep for more than one second so we only use them for subsecond sleeps. */
39 #if defined(PETSC_HAVE_NANOSLEEP)
40   else if (s < 1) {
41     struct timespec rq;
42     rq.tv_sec  = 0;
43     rq.tv_nsec = (long)(s*1e9);
44     nanosleep(&rq,0);
45   }
46 #elif defined(PETSC_HAVE_USLEEP)
47   /* POSIX.1-2001 deprecates this in favor of nanosleep because nanosleep defines interaction with signals */
48   else if (s < 1) usleep((unsigned int)(s*1e6));
49 #endif
50 
51 #if defined(PETSC_HAVE_SLEEP)
52   else sleep((int)s);
53 #elif defined(PETSC_HAVE__SLEEP) && defined(PETSC_HAVE__SLEEP_MILISEC)
54   else _sleep((int)(s*1000));
55 #elif defined(PETSC_HAVE__SLEEP)
56   else _sleep((int)s);
57 #else
58   SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP_SYS,"No support for sleep() on this machine");
59 #endif
60   PetscFunctionReturn(0);
61 }
62 
63