This class represents a concrete task performed by an AsyncManager. More...
#include "asyncTask.h"
Public Types | |
enum | DoneStatus { DS_done, DS_cont, DS_again, DS_pickup, DS_exit, DS_pause, DS_interrupt, DS_await } |
enum | State { S_inactive, S_active, S_servicing, S_servicing_removed, S_sleeping, S_active_nested, S_awaiting } |
Public Types inherited from AsyncFuture | |
typedef pvector< PT(AsyncFuture)> | Futures |
Public Member Functions | |
AsyncTask (const std::string &name=std::string()) | |
void | clear_delay () |
Removes any delay specified for the task. More... | |
void | clear_name () |
Resets the task's name to empty. More... | |
virtual TypeHandle | force_init_type () |
double | get_average_dt () const |
double | get_delay () const |
Returns the delay value that has been set via set_delay, if any. More... | |
double | get_dt () const |
int | get_elapsed_frames () const |
Returns the number of frames that have elapsed since the task was started, according to the task manager's clock. More... | |
double | get_elapsed_time () const |
Returns the amount of time that has elapsed since the task was started, according to the task manager's clock. More... | |
AsyncTaskManager * | get_manager () const |
double | get_max_dt () const |
std::string | get_name_prefix () const |
Returns the initial part of the name, up to but not including any trailing digits following a hyphen or underscore. More... | |
int | get_priority () const |
int | get_sort () const |
int | get_start_frame () const |
Returns the frame number at which the task was started, according to the task manager's clock. More... | |
double | get_start_time () const |
Returns the time at which the task was started, according to the task manager's clock. More... | |
State | get_state () const |
const std::string & | get_task_chain () const |
AtomicAdjust::Integer | get_task_id () const |
virtual TypeHandle | get_type () const |
double | get_wake_time () const |
If this task has been added to an AsyncTaskManager with a delay in effect, this returns the time at which the task is expected to awaken. More... | |
bool | has_delay () const |
Returns true if a delay has been set for this task via set_delay(), or false otherwise. More... | |
bool | is_alive () const |
virtual void | output (std::ostream &out) const |
void | recalc_wake_time () |
If the task is currently sleeping on a task chain, this resets its wake time to the current time + get_delay(). More... | |
bool | remove () |
Removes the task from its active manager, if any, and makes the state S_inactive (or possible S_servicing_removed). More... | |
void | set_delay (double delay) |
Specifies the amount of time, in seconds, by which this task will be delayed after it has been added to the AsyncTaskManager. More... | |
void | set_done_event (const std::string &done_event) |
void | set_name (const std::string &name) |
void | set_priority (int priority) |
void | set_sort (int sort) |
void | set_task_chain (const std::string &chain_name) |
Public Member Functions inherited from AsyncFuture | |
AsyncFuture () | |
Initializes the future in the pending state. More... | |
virtual | ~AsyncFuture () |
Destroys the future. More... | |
bool | add_waiting_task (AsyncTask *task) |
Indicates that the given task is waiting for this future to complete. More... | |
bool | cancelled () const |
Returns true if the future was cancelled. More... | |
bool | done () const |
Returns true if the future is done or has been cancelled. More... | |
const std::string & | get_done_event () const |
TypedObject * | get_result () const |
Returns this future's result. More... | |
void | get_result (TypedObject *&ptr, ReferenceCount *&ref_ptr) const |
Returns this future's result as a pair of TypedObject, ReferenceCount pointers. More... | |
void | notify_done (bool clean_exit) |
Schedules the done callbacks. More... | |
void | set_done_event (const std::string &done_event) |
void | set_result (std::nullptr_t) |
Sets this future's result. More... | |
void | set_result (TypedObject *result) |
void | set_result (TypedReferenceCount *result) |
void | set_result (TypedWritableReferenceCount *result) |
void | set_result (const EventParameter &result) |
void | set_result (TypedObject *ptr, ReferenceCount *ref_ptr) |
Sets this future's result. More... | |
void | wait () |
Waits until the future is done. More... | |
void | wait (double timeout) |
Waits until the future is done, or until the timeout is reached. More... | |
Public Member Functions inherited from TypedReferenceCount | |
TypedReferenceCount (const TypedReferenceCount ©) | |
void | operator= (const TypedReferenceCount ©) |
Public Member Functions inherited from TypedObject | |
TypedObject (const TypedObject ©)=default | |
TypedObject * | as_typed_object () |
Returns the object, upcast (if necessary) to a TypedObject pointer. More... | |
const TypedObject * | as_typed_object () const |
Returns the object, upcast (if necessary) to a TypedObject pointer. More... | |
int | get_best_parent_from_Set (const std::set< int > &) const |
int | get_type_index () const |
Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. More... | |
bool | is_exact_type (TypeHandle handle) const |
Returns true if the current object is the indicated type exactly. More... | |
bool | is_of_type (TypeHandle handle) const |
Returns true if the current object is or derives from the indicated type. More... | |
TypedObject & | operator= (const TypedObject ©)=default |
Public Member Functions inherited from ReferenceCount | |
int | get_ref_count () const |
WeakReferenceList * | get_weak_list () const |
Returns the WeakReferenceList associated with this ReferenceCount object. More... | |
bool | has_weak_list () const |
Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise. More... | |
void | local_object () |
This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack. More... | |
void | ref () const |
Explicitly increments the reference count. More... | |
bool | ref_if_nonzero () const |
Atomically increases the reference count of this object if it is not zero. More... | |
bool | test_ref_count_integrity () const |
Does some easy checks to make sure that the reference count isn't completely bogus. More... | |
bool | test_ref_count_nonzero () const |
Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More... | |
virtual bool | unref () const |
Explicitly decrements the reference count. More... | |
WeakReferenceList * | weak_ref () |
Adds the indicated PointerToVoid as a weak reference to this object. More... | |
void | weak_unref () |
Removes the indicated PointerToVoid as a weak reference to this object. More... | |
Public Member Functions inherited from Namable | |
Namable (const std::string &initial_name="") | |
void | clear_name () |
Resets the Namable's name to empty. More... | |
const std::string & | get_name () const |
bool | has_name () const |
Returns true if the Namable has a nonempty name set, false if the name is empty. More... | |
void | output (std::ostream &out) const |
Outputs the Namable. More... | |
void | set_name (const std::string &name) |
Static Public Member Functions | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from AsyncFuture | |
static AsyncFuture * | gather (Futures futures) |
Creates a new future that returns `done()` when all of the contained futures are done. More... | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from TypedReferenceCount | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from TypedObject | |
static TypeHandle | get_class_type () |
static void | init_type () |
This function is declared non-inline to work around a compiler bug in g++ 2.96. More... | |
Static Public Member Functions inherited from ReferenceCount | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from Namable | |
static TypeHandle | get_class_type () |
static void | init_type () |
Public Attributes | |
get_average_dt | |
Returns the average amount of time elapsed during each of the task's previous run cycles, in seconds. More... | |
get_done_event | |
get_dt | |
Returns the amount of time elapsed during the task's previous run cycle, in seconds. More... | |
get_manager | |
Returns the AsyncTaskManager that this task is active on. More... | |
get_max_dt | |
Returns the maximum amount of time elapsed during any one of the task's previous run cycles, in seconds. More... | |
get_name | |
get_priority | |
Returns the task's current priority value. More... | |
get_sort | |
Returns the task's current sort value. More... | |
get_state | |
Returns the current state of the task. More... | |
get_task_chain | |
Returns the AsyncTaskChain on which this task will be running. More... | |
get_task_id | |
Returns a number guaranteed to be unique for each different AsyncTask object in the universe. More... | |
is_alive | |
Returns true if the task is currently active or sleeping on some task chain, meaning that it will be executed in its turn, or false if it is not active. More... | |
set_done_event | |
Sets the event name that will be triggered when the task finishes. More... | |
set_name | |
set_priority | |
Specifies a priority value for this task. More... | |
set_sort | |
Specifies a sort value for this task. More... | |
set_task_chain | |
Specifies the AsyncTaskChain on which this task will be running. More... | |
Public Attributes inherited from AsyncFuture | |
get_done_event | |
Returns the event name that will be triggered when the future finishes. More... | |
set_done_event | |
Sets the event name that will be triggered when the future finishes. More... | |
Public Attributes inherited from TypedObject | |
get_type | |
Public Attributes inherited from ReferenceCount | |
get_ref_count | |
Returns the current reference count. More... | |
Public Attributes inherited from Namable | |
get_name | |
set_name | |
Friends | |
class | AsyncFuture |
class | AsyncTaskChain |
class | AsyncTaskManager |
class | AsyncTaskSequence |
class | PythonTask |
This class represents a concrete task performed by an AsyncManager.
Normally, you would subclass from this class, and override do_task(), to define the functionality you wish to have the task perform.
Definition at line 32 of file asyncTask.h.
|
inline |
Removes any delay specified for the task.
The next time the task is added to the queue, it will run immediately. This does not affect the task's wake time if it has already been added to the queue.
Definition at line 83 of file asyncTask.I.
|
inline |
Resets the task's name to empty.
Definition at line 133 of file asyncTask.I.
|
inline |
Returns the delay value that has been set via set_delay, if any.
Definition at line 101 of file asyncTask.I.
int AsyncTask::get_elapsed_frames | ( | ) | const |
Returns the number of frames that have elapsed since the task was started, according to the task manager's clock.
It is only valid to call this if the task's status is not S_inactive.
Definition at line 160 of file asyncTask.cxx.
double AsyncTask::get_elapsed_time | ( | ) | const |
Returns the amount of time that has elapsed since the task was started, according to the task manager's clock.
It is only valid to call this if the task's status is not S_inactive.
Definition at line 147 of file asyncTask.cxx.
string AsyncTask::get_name_prefix | ( | ) | const |
Returns the initial part of the name, up to but not including any trailing digits following a hyphen or underscore.
Definition at line 225 of file asyncTask.cxx.
|
inline |
Returns the frame number at which the task was started, according to the task manager's clock.
It is only valid to call this if the task's status is not S_inactive.
Definition at line 124 of file asyncTask.I.
|
inline |
Returns the time at which the task was started, according to the task manager's clock.
It is only valid to call this if the task's status is not S_inactive.
Definition at line 112 of file asyncTask.I.
double AsyncTask::get_wake_time | ( | ) | const |
If this task has been added to an AsyncTaskManager with a delay in effect, this returns the time at which the task is expected to awaken.
It has no meaning if the task has not yet been added to a queue, or if there was no delay in effect at the time the task was added.
If the task's status is not S_sleeping, this returns 0.0.
Definition at line 104 of file asyncTask.cxx.
|
inline |
Returns true if a delay has been set for this task via set_delay(), or false otherwise.
Definition at line 93 of file asyncTask.I.
void AsyncTask::recalc_wake_time | ( | ) |
If the task is currently sleeping on a task chain, this resets its wake time to the current time + get_delay().
It is as if the task had suddenly returned DS_again. The task will sleep for its current delay seconds before running again. This method may therefore be used to make the task wake up sooner or later than it would have otherwise.
If the task is not already sleeping, this method has no effect.
Definition at line 126 of file asyncTask.cxx.
bool AsyncTask::remove | ( | ) |
Removes the task from its active manager, if any, and makes the state S_inactive (or possible S_servicing_removed).
This is a no-op if the state is already S_inactive.
Definition at line 73 of file asyncTask.cxx.
Referenced by AsyncTaskManager::remove().
|
inline |
Specifies the amount of time, in seconds, by which this task will be delayed after it has been added to the AsyncTaskManager.
At least the specified amount of time (and possibly more) will elapse before the task begins.
You may specify a delay of 0.0 to guarantee that the task will run in the next epoch following the one in which it is added.
Setting this value after the task has already been added will not affect the task's wake time; it will only affect the task if it is re-added to the queue in the future, for instance if the task returns DS_again. However, see recalc_wake_time() if you wish to apply the delay effect immediately.
Definition at line 72 of file asyncTask.I.
|
inline |
Returns the average amount of time elapsed during each of the task's previous run cycles, in seconds.
Definition at line 121 of file asyncTask.h.
|
inline |
Returns the amount of time elapsed during the task's previous run cycle, in seconds.
Definition at line 119 of file asyncTask.h.
|
inline |
Returns the AsyncTaskManager that this task is active on.
This will be NULL if the state is S_inactive.
Definition at line 105 of file asyncTask.h.
|
inline |
Returns the maximum amount of time elapsed during any one of the task's previous run cycles, in seconds.
Definition at line 120 of file asyncTask.h.
|
inline |
Returns the task's current priority value.
See set_priority().
Definition at line 116 of file asyncTask.h.
|
inline |
|
inline |
Returns the current state of the task.
Definition at line 103 of file asyncTask.h.
|
inline |
Returns the AsyncTaskChain on which this task will be running.
Each task chain runs tasks independently of the others.
Definition at line 114 of file asyncTask.h.
|
inline |
Returns a number guaranteed to be unique for each different AsyncTask object in the universe.
Definition at line 112 of file asyncTask.h.
|
inline |
Returns true if the task is currently active or sleeping on some task chain, meaning that it will be executed in its turn, or false if it is not active.
If the task has recently been removed while it is in the middle of execution, this will return false, because the task will not run again once it finishes.
Definition at line 104 of file asyncTask.h.
|
inline |
Sets the event name that will be triggered when the task finishes.
This should only be called before the task has been started, or after it has finished and before it is about to be restarted (i.e. when get_state() returns S_inactive).
Definition at line 117 of file asyncTask.h.
void AsyncTask::set_priority |
Specifies a priority value for this task.
In general, tasks with a higher priority value are executed before tasks with a lower priority value (but only for tasks with the same sort value).
Unlike the sort value, tasks with different priorities may execute at the same time, if the AsyncTaskManager has more than one thread servicing tasks.
Also see AsyncTaskChain::set_timeslice_priority(), which changes the meaning of this value. In the default mode, when the timeslice_priority flag is false, all tasks always run once per epoch, regardless of their priority values (that is, the priority controls the order of the task execution only, not the number of times it runs). On the other hand, if you set the timeslice_priority flag to true, then changing a task's priority has an effect on the number of times it runs.
Definition at line 116 of file asyncTask.h.
void AsyncTask::set_sort |
Specifies a sort value for this task.
Within a given AsyncTaskManager, all of the tasks with a given sort value are guaranteed to be completed before any tasks with a higher sort value are begun.
To put it another way, two tasks might execute in parallel with each other only if they both have the same sort value. Tasks with a lower sort value are executed first.
This is different from the priority, which makes no such exclusion guarantees.
Definition at line 115 of file asyncTask.h.
void AsyncTask::set_task_chain |
Specifies the AsyncTaskChain on which this task will be running.
Each task chain runs tasks independently of the others.
Definition at line 114 of file asyncTask.h.
Referenced by Loader::save_async().