[/
 / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:timers Timers]

Long running I/O operations will often have a deadline by which they must have
completed. These deadlines may be expressed as absolute times, but are often
calculated relative to the current time.

As a simple example, to perform a synchronous wait operation on a timer using a
relative time one may write:

  io_service i;
  ...
  deadline_timer t(i);
  t.expires_from_now(boost::posix_time::seconds(5));
  t.wait();

More commonly, a program will perform an asynchronous wait operation on a
timer:

  void handler(boost::system::error_code ec) { ... }
  ...
  io_service i;
  ...
  deadline_timer t(i);
  t.expires_from_now(boost::posix_time::milliseconds(400));
  t.async_wait(handler);
  ...
  i.run();

The deadline associated with a timer may be also be obtained as a relative time:

  boost::posix_time::time_duration time_until_expiry
    = t.expires_from_now();

or as an absolute time to allow composition of timers:

  deadline_timer t2(i);
  t2.expires_at(t.expires_at() + boost::posix_time::seconds(30));

[heading See Also]

[link boost_asio.reference.basic_deadline_timer basic_deadline_timer],
[link boost_asio.reference.deadline_timer deadline_timer],
[link boost_asio.reference.deadline_timer_service deadline_timer_service],
[link boost_asio.tutorial.tuttimer1 timer tutorials].

[endsect]
