From: SourceForge.net <no...@so...> - 2008-10-23 19:20:08
|
Bugs item #2188102, was opened at 2008-10-22 20:52 Message generated for change (Settings changed) made by sds You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101355&aid=2188102&group_id=1355 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Pending >Resolution: None Priority: 5 Private: No Submitted By: Drutsa Pavel (rawlik) Assigned to: Sam Steingold (sds) Summary: new-clx timeout precision improvement Initial Comment: In the current new-clx realisation, the timeout argument passed to the event listening functions is 1 second multiple. But the 'C' backend use 'select()' call, and it can be more accurate. This patch permit to pass float or double numbers or dotted pair i.e (SEC. USEC) to these fuctions and the timeout will be handled correctly. ---------------------------------------------------------------------- Comment By: Sam Steingold (sds) Date: 2008-10-23 15:19 Message: thanks. the correct fix is: --- clx.f.~2.137.~ 2008-10-16 18:10:12.000000000 -0400 +++ clx.f 2008-10-23 15:10:51.001556000 -0400 @@ -6072,7 +6072,7 @@ DEFUN(XLIB:PROCESS-EVENT, display &key H int force_output_p = (boundp(STACK_0) ? get_bool(STACK_0) : 1); int discard_p = !missingp(STACK_1), peek_p = !missingp(STACK_2); struct timeval tv; - struct timeval *timeout = sec_usec(STACK_3,NIL,&tv); + struct timeval *timeout = sec_usec(STACK_3,unbound,&tv); if (!boundp(STACK_4)) NOTIMPLEMENTED; @@ -6232,7 +6232,7 @@ DEFUN(XLIB:DISCARD-CURRENT-EVENT, displa DEFUN(XLIB:EVENT-LISTEN, display &optional timeout) { struct timeval tv; - struct timeval *timeout = sec_usec(popSTACK(),NIL,&tv); + struct timeval *timeout = sec_usec(popSTACK(),unbound,&tv); Display *dpy = pop_display(); int r; XEvent trashcan; please test ---------------------------------------------------------------------- Comment By: Drutsa Pavel (rawlik) Date: 2008-10-23 08:17 Message: Test case. (defvar use-timeout 2.0) (defun print-hello (&rest event-data &key display &allow-other-keys) (format t "Hello &" ) t ) (let* ((dpy (xlib:open-display "")) (root-win ()) (top-win (xlib:create-window :parent (xlib:screen-root (first (xlib:display-roots dpy) )) :x 100 :y 100 :width 250 :height 250 :bit-gravity :north-west :background 1010101010)) ) (xlib:map-window top-win) (xlib:display-force-output dpy) (loop (setf start (/ (get-internal-real-time) internal-time-units-per-second)) (xlib:process-event dpy :handler 'print-hello :timeout use-timeout :discard-p t) (setf done (/ (get-internal-real-time) internal-time-units-per-second)) (setf passed (- done start)) (setf delta (abs (- use-timeout passed) )) (if (< delta 0.5) (print "OK") (error "Timeout error require ~f, real ~f, delta ~f " use-timeout passed delta) ) (when (< 0.05 use-timeout) (setf use-timeout (* use-timeout 0.7))) ) ) Maybe I use an too old clisp implementation ? ---------------------------------------------------------------------- Comment By: Sam Steingold (sds) Date: 2008-10-22 23:39 Message: I think the current code already handles sub-sec precision. the sec_usec function already does what you want. if it does not, please provide a test case and fix sec_usec() ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101355&aid=2188102&group_id=1355 |