Sirikata
|
Poller allows you to generate a callback periodically without having to inherit from the PollingService class. More...
#include <Poller.hpp>
Public Member Functions | |
Poller (Network::IOStrand *str, const Network::IOCallback &cb, const char *cb_tag, const Duration &max_rate=Duration::microseconds(0), bool accurate=false) | |
virtual | ~Poller () |
virtual void | start () |
Start polling this service on this strand at the given maximum rate. | |
virtual void | stop () |
Stop scheduling this service. | |
Private Member Functions | |
void | setupNextTimeout (const Duration &user_time) |
void | handleExec (const Network::IOTimerWPtr &timer) |
Private Attributes | |
Network::IOStrand * | mStrand |
Network::IOTimerPtr | mTimer |
Duration | mMaxRate |
bool | mAccurate |
bool | mUnschedule |
Network::IOCallback | mCB |
Network::IOCallback | mUserCB |
const char * | mCBTag |
Poller allows you to generate a callback periodically without having to inherit from the PollingService class.
It serves the same function but requires a new object for every callback instead of using an existing service.
Normally, the rate of invocations is approximate and essentially assumes that your callback will execute very quickly. You can also use a more accurate mode that tries to account for the time spent in your callback and tries to consistently trigger your callback at the requested period. Even with the 'accurate' setting, you're still subject to delays due to the event queue and imprecision from the timer. Further, there is overhead for timing the user callback. The inaccurate version will only invoke callbacks at a slower rate, and usually not by much, so you should only use this in special circumstances.
Sirikata::Poller::Poller | ( | Network::IOStrand * | str, |
const Network::IOCallback & | cb, | ||
const char * | cb_tag, | ||
const Duration & | max_rate = Duration::microseconds(0) , |
||
bool | accurate = false |
||
) |
References handleExec(), mCB, mStrand, mTimer, and Sirikata::Network::IOStrand::wrap().
Sirikata::Poller::~Poller | ( | ) | [virtual] |
References Sirikata::Logging::error, mCBTag, and SILOG.
void Sirikata::Poller::handleExec | ( | const Network::IOTimerWPtr & | timer | ) | [private] |
References mAccurate, mUnschedule, mUserCB, Sirikata::Task::LocalTime::now(), Sirikata::Time::null(), setupNextTimeout(), and start().
Referenced by Poller().
void Sirikata::Poller::setupNextTimeout | ( | const Duration & | user_time | ) | [private] |
References mCB, mCBTag, mMaxRate, mStrand, mTimer, and Sirikata::Network::IOStrand::post().
Referenced by handleExec().
void Sirikata::Poller::start | ( | ) | [virtual] |
Start polling this service on this strand at the given maximum rate.
Reimplemented in Sirikata::PollerService, Sirikata::PollingService, Sirikata::Graphics::ResourceDownloadPlanner, Sirikata::SessionManager, Sirikata::TimeSteppedSimulation, Sirikata::LocationService, Sirikata::Proximity, Sirikata::LibproxManualProximity, Sirikata::LibproxProximity, and Sirikata::LibproxProximityBase.
References Sirikata::Logging::error, mCB, mCBTag, mStrand, Sirikata::Network::IOStrand::post(), and SILOG.
Referenced by Sirikata::AggregateManager::AggregateManager(), handleExec(), Sirikata::Forwarder::start(), Sirikata::Proximity::start(), Sirikata::AlwaysLocationUpdatePolicy::start(), and Sirikata::PollerService::start().
void Sirikata::Poller::stop | ( | ) | [virtual] |
Stop scheduling this service.
Note that this does not immediately stop the service, it simply guarantees the service will not be scheduled again. This allows outstanding events to be handled properly.
Reimplemented in Sirikata::PollerService, Sirikata::PollingService, Sirikata::Graphics::OgreRenderer, Sirikata::Graphics::ResourceDownloadPlanner, Sirikata::Graphics::PriorityDownloadPlanner, Sirikata::SessionManager, Sirikata::TimeSteppedSimulation, Sirikata::Graphics::OgreSystem, Sirikata::LocationService, Sirikata::Proximity, Sirikata::LibproxManualProximity, Sirikata::LibproxProximityBase, and Sirikata::DistributedCoordinateSegmentation.
References Sirikata::Logging::error, mCBTag, mUnschedule, and SILOG.
Referenced by Sirikata::Forwarder::stop(), Sirikata::Proximity::stop(), Sirikata::AlwaysLocationUpdatePolicy::stop(), Sirikata::PollerService::stop(), and Sirikata::AggregateManager::~AggregateManager().
bool Sirikata::Poller::mAccurate [private] |
Referenced by handleExec().
Network::IOCallback Sirikata::Poller::mCB [private] |
Reimplemented in Sirikata::TimeSyncClient.
Referenced by Poller(), setupNextTimeout(), and start().
const char* Sirikata::Poller::mCBTag [private] |
Referenced by setupNextTimeout(), start(), stop(), and ~Poller().
Duration Sirikata::Poller::mMaxRate [private] |
Referenced by setupNextTimeout().
Network::IOStrand* Sirikata::Poller::mStrand [private] |
Referenced by Poller(), setupNextTimeout(), and start().
Network::IOTimerPtr Sirikata::Poller::mTimer [private] |
Referenced by Poller(), and setupNextTimeout().
bool Sirikata::Poller::mUnschedule [private] |
Referenced by handleExec(), and stop().
Network::IOCallback Sirikata::Poller::mUserCB [private] |
Referenced by handleExec().