module timeout_wrapper = {
object tmr = {}
<<< header
class sec_timer;
>>>
<<< impl
class sec_timer : public timer {
%`handle_timeout` rcb;
int ttl;
ivy_class *ivy;
public:
sec_timer(%`handle_timeout` rcb, ivy_class *ivy)
: rcb(rcb), ivy(ivy) {
ttl = 1000;
}
virtual int ms_delay() {
return ttl;
}
virtual void timeout(int elapse) {
ttl -= elapse;
if (ttl <= 0) {
ttl = 1000;
ivy->__lock();
rcb();
ivy->__unlock();
}
}
};
>>>
<<< member
sec_timer *`tmr`;
>>>
<<< init
install_timer(`tmr` = new sec_timer(`handle_timeout`,this));
>>>
action handle_timeout = {
call timeout
}
}
module timeout_sec = {
action timeout
object spec = {
}
instance impl : timeout_wrapper
isolate iso = this
}