http://qs321.pair.com?node_id=859287

Eyck has asked for the wisdom of the Perl Monks concerning the following question:

I'm using following code:
$inotify->watch ($watchdir, IN_ALL_EVENTS) or die "watch creat +ion failed" ; $0="cping: watch ready, waiting for activity (".scalar(localti +me()).")..."; my @events = $inotify->read;
the line $inotify->read; is blocking, which is nice, since it doesn't burn CPU when there is nothing to do. But, now I need to run code, when there was no activity for longer then $timelimit; I could switch to non-blocking calls, ie use something like this:
$inotify->blocking(0); ... $inotify->read; sleep 1s; if ($idle>$timelimit) { code(); };
but then my code starts burning CPU AND becomes less responsive ( blocking code has much better then a 1 second latency with reacting to activity in $watchdir ). Is there any way out?