<darkhedos@gmail.com> wrote:
+---------------
| Hello, I'm looking for an alternative to (get-internal-real-time) in
| Lisp to obtain more precise time intervals. get-internal-real-time
| seems to compare to GetTickCount on Win32 in term of accuracy, where
| it doesn't have any precision under 10-20 ms.
+---------------
Common Lisp does not define anything more precise than
GET-INTERNAL-REAL-TIME. And whether there even *is* anything
more precise also depends on your operating system, not just
your CL implementation. That said, however...
+---------------
| I haven't had luck finding any Lisp library dealing with this.
| There's | no implementation specific extension for that on my
| implementation (SBCL).
+---------------
Are you sure? SBCL was based on CMUCL, and CMUCL provides the
UNIX:UNIX-GETTIMEOFDAY function:
cmu> (documentation #'unix:unix-gettimeofday 'function)
"If it works, unix-gettimeofday returns 5 values: T, the seconds
and microseconds of the current time of day, the timezone (in
minutes west of Greenwich), and a daylight-savings flag. If it
doesn't work, it returns NIL and the errno."
cmu>
Note that the "seconds" here is *Unix* time in seconds, not CL's
"universal time". Add LISP::UNIX-TO-UNIVERSAL-TIME (2208988800)
to the former to get the latter.
cmu> (unix:unix-gettimeofday)
T
1159335019
692535
420
0
cmu> (loop for i below 10 collect (nth-value 2 (unix:unix-gettimeofday)))
(920407 920427 920435 920442 920449 920456 920462 920469 920476 920482)
cmu> (mapcar #'- (cdr *) *)
(20 8 7 7 7 6 7 7 6)
cmu>
Wow, that's slow! 6-8 us per iteration. Oh, yeah, I forgot,
that's interpreted. Let's try compiled:
cmu> (funcall
(compile nil
(lambda ()
(loop for i below 10
collect (nth-value 2 (unix:unix-gettimeofday))))))
; Compiling LAMBDA NIL:
; Compiling Top-Level Form:
(861686 861687 861688 861688 861689 861689 861690 861690 861691 861691)
cmu> (mapcar #'- (cdr *) *)
(1 1 0 1 0 1 0 1 0)
cmu>
That's better!! ;-} ;-}
Anyway, do an (APROPOS :GETTIMEOFDAY) in SBCL and see what you get...
-Rob
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607