On Wed, Jul 02, 2008 at 01:46:36PM +0300, vvvua <[EMAIL PROTECTED]> wrote:
> Default loop also maintain an async io on sockets. The program
> architecture is designed with only one point of realisation of async
> calls - in ev_loop (loop,0) with default loop;
It is totally unclear to me what you mean with "async io" - i assume this
is something in your program?
> First, i create a timer at 45sec.
> After each callback, i am trying to set timer on 5 seconds, but timer
> waits 45 seconds.
You should probbaly show the code for that.
> TimeSockMapper()
> {
> memset(&tm,0,sizeof(ev_timer));
> memset(&repeat,0,sizeof(ev_tstamp));
You do not need to zero-initialise the watcher structures, this will only
bloat your code.
> void timeout_cb(EV_P_ struct ev_timer *w_, int revents)
> {
> int cfd;
> struct TimeSockMapper * w= (struct TimeSockMapper *)w_;
> struct LocalOpcodeData * ldata = (struct LocalOpcodeData *) w->defPoint;
> cfd=w->fd;
>
> ev_timer_stop(loop,(ev_timer * )w);
No restart here.
> void set_timeout(int fd, long long seconds,LocalOpcodeData *ldata)
> {
> TimeSockMapper *mtm=new TimeSockMapper();
> mtm->repeat=0;
> mtm->fd=fd;
> mtm->defPoint=ldata;
>
>
> ev_timer_init (&(mtm-> tm), timeout_cb, seconds, 0.);
> ev_timer_set (&(mtm-> tm), seconds + ev_now (loop) - ev_time (), 0.);
> ev_timer_start (loop,&(mtm->tm));
>
No restart here either.
If the timer indeed doesn't restart as you want, then you should show us
the code that actually resets the timer and restarts it - make sure you
stop the timer before modifying it, or, even better, use ev_timer_restart
and a suitable restart interval.
--
The choice of a Deliantra, the free code+content MORPG
-----==- _GNU_ http://www.deliantra.net
----==-- _ generation
---==---(_)__ __ ____ __ Marc Lehmann
--==---/ / _ \/ // /\ \/ / [EMAIL PROTECTED]
-=====/_/_//_/\_,_/ /_/\_\
_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev