[SDL] Why not nanosleep()?
666 at grafzahl.de
Mon Apr 3 06:14:41 PDT 2000
Christian Bauer wrote:
> 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.
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