"Luke Palmer" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> my $result is lazy::threaded := { slow_fn_imp @_ };
> loop {
> timeout(60);
> return $result;
> CATCH {
> when Timeout { print "...$(time)\n"
> }
> }
>
> Now write the C<timeout> function :-P.
Well, the obvious is
{
temp %SIG{ALRM} = { print "..."; alarm(60) }
alarm(60);
LAST {alarm(0) };
return $result;
}
Needless to say, I don't like that. But the good thing now is that I don't
need the loop. Now, if we had some form of Parrot-level signaling (instead
of OS-level); and if we had resumable exceptions; then perhaps I'd be able
to write
sub slow_fn {
my $tick = Timer.new(60);
CATCH { when $tick => { print "..."; continue } }
return slow_fn_imp @_ ;
}
I think this hides the threads pretty effectively. Is a parrot-level timer
to much to ask for? How about resumable exceptions? But perhaps I'm still
being too clever, when a simpler solution exists:
sub slow_fn {
my $tick = Timer.new(60, { print "..." });
return slow_fn_imp @_;
}
Now if I could just get the compiler to not complain about that unused
variable...
Dave.