Paste: delayloop utility
Author: | too_embarrassed_to_admit |
Mode: | factor |
Date: | Wed, 29 Jul 2009 00:07:05 |
Plain Text |
USING: accessors calendar combinators continuations fry kernel
locals sequences threads ;
IN: delayloop
GENERIC: stall
GENERIC: slow-down
TUPLE: staller interval ;
: <staller> instant staller boa ;
M: staller stall
interval>> sleep ;
M: staller slow-down
[ 100 milliseconds time+ ] change-interval drop ;
ERROR: need-to-slow-down ;
:: delay-retry
[
[
staller stall
[ param quot call return ]
[ dup need-to-slow-down? [ drop ] [ rethrow ] if
staller slow-down
] recover
t
] loop
] with-return ; inline
: delay-each
<staller> '[ _ _ delay-retry ] each ; inline
New Annotation