質問

I'm looking for some assistance, please, to measure the time of a function call when using a while loop -- i.e., the clock should stop when the function throws done. I found the following timer on the mailing list: http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html

(defmacro measure-time (&rest body)
  "Measure the time it takes to evaluate BODY."
  `(let ((time (current-time)))
     ,@body
     (message "%.06f" (float-time (time-since time)))))

It's used like this:

(measure-time
  (dotimes (i 100000)
    (1+ 1)))

An example of how to use the timer macro with a while loop would be greatly appreciated. I'm looking for the total time beginning from before the while loop commenced to the end when done is thrown.

(defun test ()
  (measure-time)
  (catch 'done
    (while t
      [*** do a bunch of stuff]
      (when (condition-satisfied-p)
        [*** STOP THE CLOCK AND PRINT TOTAL DURATION ***]
        (throw 'done nil) ))))
役に立ちましたか?

解決

Exactly as per the example you've quoted. You literally wrap (measure-time ... ) around the thing you're timing. The entirety of the catch expression, in your case.

Did you not try that?

他のヒント

BTW, this macro is called benchmark-elapse in Emacs, but it is not autoloaded, so you need to (require 'benchmark) before using it.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top