ev_timer problem
vvvua
vvvua at faust.net.ua
Thu Jul 3 16:43:41 CEST 2008
vvvua wrote:
> vvvua wrote:
>> Marc Lehmann wrote:
>> > On Wed, Jul 02, 2008 at 01:46:36PM +0300, vvvua
>> <vvvua at faust.net.ua> 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?
>> > Yes. I mean input/output with sockets
>> ev_io_init (eh->getEvP(), func, sfd, flags);
>> ev_io_start (loop, eh->getEvP());
>> > >> 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.
>> > Original code too big to show, but simple example is
>> > for(int i=100;i>0;i-=10)
>> {
>> LocalOpcodeData *ldt = new LocalOpcodeData();
>> ldt->opcode=1;
>> set_timeout(fd, i,ldt);
>> }
>>
> Sorry, it was bad example. This example works fine, becouse time
> interval is still.
>
> Next example describes the problem:
> */ / int a[3]={40,5,20};
> for(int i=0;i<3;i++)
> {
> LocalOpcodeData *ldt = new LocalOpcodeData();
> ldt->opcode=1;
> ldt->opcode_param0_uint=time(NULL);
> ldt->opcode_param1_int=a[i];
> cerr<<"\nsetTimeout="<<a[i]<<endl;
> set_timeout(cfd, i,ldt);
> }*
>
> And out is:
> /setTimeout=40
>
> setTimeout=5
>
> setTimeout=20
>
> localOpcode=1
> bot5 timer...5
>
> localOpcode=1
> bot5 timer...20/
>
>
> And the out of
> /localOpcode=1
> bot5 timer...5
>
> localOpcode=1
> bot5 timer...20
>
> /happens at firs 1..3 seconds.
> Timeout for 40 seconds not passed over a 2 minutes. And i do not wait
> for it any more.
SORRY! I have a bad day...
set_timeout(cfd, i,ldt);
must be
set_timeout(cfd, a[i],ldt);
After thet change works fine if i have a socket input/output.
But...
I setup first timer at 5 seconds.
After callback i setup timers from last given example.
If we have only timer activity callback function not called until i have
i/o on sockets.
Waiting about of 1 minute..
After socket i/o i have a call of callback function for all timers at ones.
>
>> >> 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.
>> > ok, i'll remove it.
>> > >> 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.
>> > it's ok
>> > >> 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.
>> > that's also ok.
>> > 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.
>> >
>> > ev_loop is in different thread. Is this a problem?
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> libev mailing list
>> libev at lists.schmorp.de
>> http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> libev mailing list
> libev at lists.schmorp.de
> http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.schmorp.de/pipermail/libev/attachments/20080703/b13fd6c5/attachment.html>
More information about the libev
mailing list