mongo::BackgroundJob Class Reference

Background thread dispatching. More...

#include <background.h>

Inheritance diagram for mongo::BackgroundJob:
mongo::PeriodicTask::Runner mongo::task::Task mongo::task::Server

List of all members.

Public Types

enum  State { NotStarted, Running, Done }

Public Member Functions

BackgroundJobgo ()
 starts job.
bool wait (unsigned msTimeOut=0)
 wait for completion.
State getState () const
bool running () const

Protected Member Functions

 BackgroundJob (bool selfDelete=false)
 sub-class must intantiate the BackgrounJob
virtual string name () const =0
virtual void run ()=0
 define this to do your work.

Detailed Description

Background thread dispatching.

subclass and define run()

It is ok to call go(), that is, run the job, more than once -- if the previous invocation has finished. Thus one pattern of use is to embed a backgroundjob in your object and reuse it (or same thing with inheritance). Each go() call spawns a new thread.

Thread safety: note when job destructs, the thread is not terminated if still running. generally if the thread could still be running, allocate the job dynamically and set deleteSelf to true.

go() and wait() are not thread safe run() will be executed on the background thread BackgroundJob object must exist for as long the background thread is running

Constructor & Destructor Documentation

mongo::BackgroundJob::BackgroundJob ( bool  selfDelete = false  )  [explicit, protected]

sub-class must intantiate the BackgrounJob

selfDelete if set to true, object will destruct itself after the run() finished
selfDelete instantes cannot be wait()-ed upon

Member Function Documentation

BackgroundJob & mongo::BackgroundJob::go (  ) 

starts job.

returns immediatelly after dispatching.

the BackgroundJob object must live for as long the thread is still running, ie until getState() returns Done.
virtual void mongo::BackgroundJob::run (  )  [protected, pure virtual]

define this to do your work.

after this returns, state is set to done. after this returns, deleted if deleteSelf true.

NOTE: if run() throws, the exception will be caught within 'this' object and will ultimately lead to the BackgroundJob's thread being finished, as if run() returned.

Implemented in mongo::PeriodicTask::Runner.

bool mongo::BackgroundJob::wait ( unsigned  msTimeOut = 0  ) 

wait for completion.

msTimeOut maximum amount of time to wait in millisecons
true if did not time out. false otherwise.
you can call wait() more than once if the first call times out. but you cannot call wait on a self-deleting job.

The documentation for this class was generated from the following files:
Generated on Wed Sep 14 01:46:41 2011 for MongoDB by  doxygen 1.6.3