[SDL] Why not nanosleep()?

Daniel Vogel 666 at grafzahl.de
Mon Apr 3 06:14:41 PDT 2000


Christian Bauer wrote:
> 
> Hi!
> 
> On Mon, 3 Apr 2000, Maxim Sobolev wrote:
> > I'm wondering why the SDL library doesn't use POSIX conformant nanosleep()
> > function in its SDL_Delay() routine. Currently select() used for this purpose,
> 
> I also wondered a while ago and tried to replace the select() with
> nanosleep() and usleep(). The result: under Linux 2.2.x, the select()
> timeout seems to have a far higher accuracy and resolution than *sleep(),
> e.g. nanosleep(3ms) on my machine usually waits for about 20-30ms,
> sometimes 14-16ms, while select() is relatively constant at ~3ms.

BUGS
       The current implementation of nanosleep is  based  on  the
       normal  kernel  timer mechanism, which has a resolution of
       1/HZ s (i.e, 10 ms on Linux/i386 and 1 ms on Linux/Alpha).
       Therefore, nanosleep pauses always for at least the speci­
       fied time, however it can take up to  10  ms  longer  than
       specified  until  the  process becomes runnable again. For
       the same reason, the value returned in case of a delivered
       signal  in *rem is usually rounded to the next larger mul­
       tiple of 1/HZ s.

       As some applications  require  much  more  precise  pauses
       (e.g.,  in  order to control some time-critical hardware),
       nanosleep is also capable of short high-precision  pauses.
       If  the process is scheduled under a real-time policy like
       SCHED_FIFO or SCHED_RR, then pauses of up to 2 ms will  be
       performed as busy waits with microsecond precision.

-- 
Daniel Vogel                           My opinions may have changed,
666 @ http://grafzahl.de               but not the fact that I am right



More information about the SDL mailing list