Boost logo

Boost Users :

From: Yuval Ronen (ronen_yuval_at_[hidden])
Date: 2007-07-25 04:36:56


Darren Garvey wrote:
> Hey Yuval,
>
> On 24/07/07, *Yuval Ronen* <ronen_yuval_at_[hidden]
> <mailto:ronen_yuval_at_[hidden]>> wrote:
>
> Hi.
> I'm writing an application that uses many timers in many places. I'd
> like to use asio::deadline_timer for this purpose, and an
> asio::deadline_timer requires an instance of asio::io_service to
> function. The easy way to do it is to create an asio::io_service along
> side with each instance of deadline_timer. However, I fear that this is
> may be wasteful in terms of OS resources. So my first question is
> whether this is true.
>
>
> I think you're right. Having an io_service-per-timer would probably be
> quite wasteful.
>
> If that's true, then I'm not creating an io_service for each
> deadline_timer, so I must be sharing a single io_service by several
> timers. The problem with such a solution is that the io_service doesn't
> know about the timers using it, and especially, it doesn't know how many
> such timer there are at any given point in time, and if there are any.
> If the number of timers is zero, then there is no work to be done by the
> io_service, and the thread calling io_service::run() will be released.
> This is bad, because when a new timer will be created, it will require
> that there will be a thread calling io_service::run(). So what's the
> best solution?
>
>
> You can always just give the io_service some work to do by constructing
> an io_service::work object with the io_service. If you control the
> lifetime of the work object then you control the io_service and there's
> no need for a dummy timer. There's also a good example in the asio docs
> (the HTTP server 2, IIRC, here: *http://tinyurl.com/2w5k4r*) that might
> be helpful (see the io_service_pool.*pp files in particular).

Thanks!


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net