|
| propagator_block () |
| Constructs a propagator_block object. More...
|
|
virtual | ~propagator_block () |
| Destroys a propagator_block object. More...
|
|
virtual message_status | propagate (_Inout_opt_ message< _Source_type > *_PMessage, _Inout_opt_ ISource< _Source_type > *_PSource) |
| Asynchronously passes a message from a source block to this target block. More...
|
|
virtual message_status | send (_Inout_ message< _Source_type > *_PMessage, _Inout_ ISource< _Source_type > *_PSource) |
| Synchronously initiates a message to this block. Called by an ISource block. When this function completes, the message will already have propagated into the block. More...
|
|
| source_block () |
| Constructs a source_block object. More...
|
|
virtual | ~source_block () |
| Destroys the source_block object. More...
|
|
virtual void | link_target (_Inout_ ITarget< _Target_type > *_PTarget) |
| Links a target block to this source_block object. More...
|
|
virtual void | unlink_target (_Inout_ ITarget< _Target_type > *_PTarget) |
| Unlinks a target block from this source_block object. More...
|
|
virtual void | unlink_targets () |
| Unlinks all target blocks from this source_block object. More...
|
|
virtual message< _Target_type > * | accept (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
| Accepts a message that was offered by this source_block object, transferring ownership to the caller. More...
|
|
virtual bool | reserve (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
| Reserves a message previously offered by this source_block object. More...
|
|
virtual message< _Target_type > * | consume (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
| Consumes a message previously offered by this source_block object and successfully reserved by the target, transferring ownership to the caller. More...
|
|
virtual void | release (runtime_object_identity _MsgId, _Inout_ ITarget< _Target_type > *_PTarget) |
| Releases a previous successful message reservation. More...
|
|
virtual void | acquire_ref (_Inout_ ITarget< _Target_type > *) |
| Acquires a reference count on this source_block object, to prevent deletion. More...
|
|
virtual void | release_ref (_Inout_ ITarget< _Target_type > *_PTarget) |
| Releases a reference count on this source_block object. More...
|
|
virtual | ~ISource () |
| Destroys the ISource object. More...
|
|
virtual | ~ITarget () |
| Destroys the ITarget object. More...
|
|
virtual bool | supports_anonymous_source () |
| When overridden in a derived class, returns true or false depending on whether the message block accepts messages offered by a source that is not linked to it. If the overridden method returns true , the target cannot postpone an offered message, as consumption of a postponed message at a later time requires the source to be identified in its source link registry. More...
|
|
|
virtual message_status | propagate_message (_Inout_ message< _Source_type > *_PMessage, _Inout_ ISource< _Source_type > *_PSource)=0 |
| When overridden in a derived class, this method asynchronously passes a message from an ISource block to this propagator_block object. It is invoked by the propagate method, when called by a source block. More...
|
|
virtual message_status | send_message (_Inout_ message< _Source_type > *, _Inout_ ISource< _Source_type > *) |
| When overridden in a derived class, this method synchronously passes a message from an ISource block to this propagator_block object. It is invoked by the send method, when called by a source block. More...
|
|
virtual void | link_source (_Inout_ ISource< _Source_type > *_PSource) |
| Links a specified source block to this propagator_block object. More...
|
|
virtual void | unlink_source (_Inout_ ISource< _Source_type > *_PSource) |
| Unlinks a specified source block from this propagator_block object. More...
|
|
virtual void | unlink_sources () |
| Unlinks all source blocks from this propagator_block object. More...
|
|
virtual void | process_input_messages (_Inout_ message< _Target_type > *_PMessage) |
| Process input messages. This is only useful for propagator blocks, which derive from source_block More...
|
|
void | initialize_source_and_target (_Inout_opt_ Scheduler *_PScheduler=NULL, _Inout_opt_ ScheduleGroup *_PScheduleGroup=NULL) |
| Initializes the base object. Specifically, the message_processor object needs to be initialized. More...
|
|
void | register_filter (filter_method const &_Filter) |
| Registers a filter method that will be invoked on every received message. More...
|
|
void | decline_incoming_messages () |
| Indicates to the block that new messages should be declined. More...
|
|
void | remove_network_links () |
| Removes all the source and target network links from this propagator_block object. More...
|
|
virtual void | link_target_notification (_Inout_ ITarget< _Target_type > *) |
| A callback that notifies that a new target has been linked to this source_block object. More...
|
|
virtual void | unlink_target_notification (_Inout_ ITarget< _Target_type > *_PTarget) |
| A callback that notifies that a target has been unlinked from this source_block object. More...
|
|
virtual message< _Target_type > * | accept_message (runtime_object_identity _MsgId)=0 |
| When overridden in a derived class, accepts an offered message by the source. Message blocks should override this method to validate the _MsgId and return a message. More...
|
|
virtual bool | reserve_message (runtime_object_identity _MsgId)=0 |
| When overridden in a derived class, reserves a message previously offered by this source_block object. More...
|
|
virtual message< _Target_type > * | consume_message (runtime_object_identity _MsgId)=0 |
| When overridden in a derived class, consumes a message that was previously reserved. More...
|
|
virtual void | release_message (runtime_object_identity _MsgId)=0 |
| When overridden in a derived class, releases a previous message reservation. More...
|
|
virtual void | resume_propagation ()=0 |
| When overridden in a derived class, resumes propagation after a reservation has been released. More...
|
|
virtual void | propagate_output_messages () |
| Propagate messages to targets. More...
|
|
virtual void | propagate_to_any_targets (_Inout_opt_ message< _Target_type > *_PMessage) |
| When overridden in a derived class, propagates the given message to any or all of the linked targets. This is the main propagation routine for message blocks. More...
|
|
void | initialize_source (_Inout_opt_ Scheduler *_PScheduler=NULL, _Inout_opt_ ScheduleGroup *_PScheduleGroup=NULL) |
| Initializes the message_propagator within this source_block . More...
|
|
void | enable_batched_processing () |
| Enables batched processing for this block. More...
|
|
virtual void | sync_send (_Inout_opt_ message< _Target_type > *_Msg) |
| Synchronously queues up messages and starts a propagation task, if this has not been done already. More...
|
|
virtual void | async_send (_Inout_opt_ message< _Target_type > *_Msg) |
| Asynchronously queues up messages and starts a propagation task, if this has not been done already More...
|
|
void | wait_for_outstanding_async_sends () |
| Waits for all asynchronous propagations to complete. This propagator-specific spin wait is used in destructors of message blocks to make sure that all asynchronous propagations have time to finish before destroying the block. More...
|
|
void | remove_targets () |
| Removes all target links for this source block. This should be called from the destructor. More...
|
|
void | _Invoke_link_source (ITarget< _TargetLinkRegistry::type::type > *_PLinkFrom) |
| Links this source to a target. More...
|
|
void | _Invoke_unlink_source (ITarget< _TargetLinkRegistry::type::type > *_PUnlinkFrom) |
| Unlinks this source from a target. More...
|
|
template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class Concurrency::propagator_block< _TargetLinkRegistry, _SourceLinkRegistry, _MessageProcessorType >
The propagator_block
class is an abstract base class for message blocks that are both a source and target. It combines the functionality of both the source_block
and target_block
classes.
- Template Parameters
-
_TargetLinkRegistry | The link registry to be used for holding the target links. |
_SourceLinkRegistry | The link registry to be used for holding the source links. |
_MessageProcessorType | The processor type for message processing. |
To avoid multiple inheritance, the propagator_block
class inherits from the source_block
class and ITarget
abstract class. Most of the functionality in the target_block
class is replicated here.
- See also
- source_block Class, ITarget Class
template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
Asynchronously passes a message from a source block to this target block.
- Parameters
-
_PMessage | A pointer to the message object. |
_PSource | A pointer to the source block offering the message. |
- Returns
- A message_status indication of what the target decided to do with the message.
The propagate
method is invoked on a target block by a linked source block. It queues up an asynchronous task to handle the message, if one is not already queued or executing.
The method throws an invalid_argument exception if either the _PMessage or _PSource parameter is NULL
.
Implements Concurrency::ITarget< _SourceLinkRegistry::type::source_type >.
5646 if (_PMessage ==
NULL)
5648 throw std::invalid_argument(
"_PMessage");
5651 if (_PSource ==
NULL)
5653 throw std::invalid_argument(
"_PSource");
#define NULL
Definition: vcruntime.h:236
The target did not accept the message.
Definition: agents.h:1751
volatile bool _M_fDeclineMessages
A bool that is set to indicate that all messages should be declined in preparation for deleting the b...
Definition: agents.h:5896
filter_method * _M_pFilter
The filter function which determines whether offered messages should be accepted. ...
Definition: agents.h:5889
virtual message_status propagate_message(_Inout_ message< _Source_type > *_PMessage, _Inout_ ISource< _Source_type > *_PSource)=0
When overridden in a derived class, this method asynchronously passes a message from an ISource block...