Date: Tue, 1 Feb 2005 13:20:15 -0800 (PST) From: Julian Elischer <julian@elischer.org> To: Peter Jeremy <PeterJeremy@optushome.com.au> Cc: current@freebsd.org Subject: Re: cynchronised sleep capbilty.. Message-ID: <20050201130340.D92335@localhost> In-Reply-To: <20050201190318.GE45608@cirb503493.alcatel.com.au> References: <20050201101113.J572@localhost> <20050201190318.GE45608@cirb503493.alcatel.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2 Feb 2005, Peter Jeremy wrote: > On Tue, 2005-Feb-01 10:20:24 -0800, Julian Elischer wrote: > >while: > >do > > report results > > sleep -until_next 10 > >done > > How about: > 1) Re-write the loop in C, perl or equivalent using setitimer(). You > can system() out to collect the results. > 2) <kludge>Write a small C program that uses setitimer() and signals > its parent whenever the timer triggers. Run it in the background > and just pause within the sh loop.</kludge> > > this is what I ended up doing.. # like sleep 10 except that it phase locks to teh 10 second boundary # so that multiple machines are talking about the same sample period. sync10 () { local SEC NEWSEC set `date +"%S"` SEC=$1 case $SEC in ?[012345678]) sleep $((9 - ($SEC % 10))) ;; ?9) ;; esac set `date +"%S"` NEWSEC=$1 while : do # check for overshoot of up to 7 seconds case $NEWSEC in ?[01234567]) return ;; esac sleep 0.1 set `date +"%S"` NEWSEC=$1 done } yeah, gross, but it works and there are tons of spare cycles on these machines :-) -- +------------------------------------+ ______ _ __ | __--_|\ Julian Elischer | \ U \/ / hard at work in | / \ julian@elischer.org +------>x USA \ a very strange | ( OZ ) \___ ___ | country ! +- X_.---._/ presently in San Francisco \_/ \\ v
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050201130340.D92335>