Defines a block allowing sources of distinct types to be joined. Join node is a single-target, multi-source ordered propagator block
More...
|
| _Join_node () |
| Constructs a join within the default scheduler, and places it on any schedule group of the scheduler's choosing. More...
|
|
| _Join_node (Scheduler &_PScheduler) |
| Constructs a join within the specified scheduler, and places it on any schedule group of the scheduler's choosing. More...
|
|
| _Join_node (ScheduleGroup &_PScheduleGroup) |
| Constructs a join within the specified schedule group. The scheduler is implied by the schedule group. More...
|
|
| ~_Join_node () |
| Cleans up any resources that may have been created by the join. More...
|
|
| 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 void | link_target (_Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, links a target block to this ISource block. More...
|
|
virtual void | unlink_target (_Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, unlinks a target block from this ISource block, if found to be previously linked. More...
|
|
virtual message< single_link_registry< ITarget< _Destination_type > >::type::type > * | accept (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, accepts a message that was offered by this ISource block, transferring ownership to the caller. More...
|
|
virtual bool | reserve (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, reserves a message previously offered by this ISource block. More...
|
|
virtual message< single_link_registry< ITarget< _Destination_type > >::type::type > * | consume (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, consumes a message previously offered by this ISource block and successfully reserved by the target, transferring ownership to the caller. More...
|
|
virtual void | release (runtime_object_identity _MsgId, _Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, releases a previous successful message reservation. More...
|
|
virtual void | acquire_ref (_Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, acquires a reference count on this ISource block, to prevent deletion. More...
|
|
virtual void | release_ref (_Inout_ ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PTarget)=0 |
| When overridden in a derived class, releases a reference count on this ISource block. More...
|
|
virtual | ~ITarget () |
| Destroys the ITarget object. More...
|
|
virtual message_status | propagate (_Inout_opt_ message< multi_link_registry< ISource< size_t > >::type::source_type > *_PMessage, _Inout_opt_ ISource< multi_link_registry< ISource< size_t > >::type::source_type > *_PSource)=0 |
| When overridden in a derived class, asynchronously passes a message from a source block to this target block. More...
|
|
virtual message_status | send (_Inout_ message< multi_link_registry< ISource< size_t > >::type::source_type > *_PMessage, _Inout_ ISource< multi_link_registry< ISource< size_t > >::type::source_type > *_PSource)=0 |
| When overridden in a derived class, synchronously passes a message to the target block. 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 sourse link registry. More...
|
|
|
virtual message_status | propagate_message (message< size_t > *_PMessage, ISource< size_t > *_PSource) |
| Asynchronously passes a message from an ISource block to this ITarget block. It is invoked by the propagate method, when called by a source block. More...
|
|
virtual message< _Destination_type > * | accept_message (runtime_object_identity _MsgId) |
| Accepts an offered message by the source, transferring ownership to the caller. More...
|
|
virtual bool | reserve_message (runtime_object_identity _MsgId) |
| Reserves a message previously offered by the source. More...
|
|
virtual message< _Destination_type > * | consume_message (runtime_object_identity _MsgId) |
| Consumes a message previously offered by the source and reserved by the target, transferring ownership to the caller. More...
|
|
virtual void | release_message (runtime_object_identity _MsgId) |
| Releases a previous message reservation. More...
|
|
virtual void | resume_propagation () |
| Resumes propagation after a reservation has been released More...
|
|
virtual void | link_target_notification (_Inout_ ITarget< _Destination_type > *) |
| Notification that a target was linked to this source. More...
|
|
virtual void | propagate_to_any_targets (_Inout_opt_ message< _Destination_type > *) |
| Takes the message and propagates it to all the targets of this join block. 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 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< single_link_registry< ITarget< _Destination_type > >::type::type > *_PLinkFrom) |
| Links this source to a target. More...
|
|
void | _Invoke_unlink_source (ITarget< single_link_registry< ITarget< _Destination_type > >::type::type > *_PUnlinkFrom) |
| Unlinks this source from a target. More...
|
|
virtual void | link_source (_Inout_ ISource< multi_link_registry< ISource< size_t > >::type::source_type > *_PSource)=0 |
| When overridden in a derived class, links a specified source block to this ITarget block. More...
|
|
virtual void | unlink_source (_Inout_ ISource< multi_link_registry< ISource< size_t > >::type::source_type > *_PSource)=0 |
| When overridden in a derived class, unlinks a specified source block from this ITarget block. More...
|
|
template<typename _Type, typename _Destination_type, join_type _Jtype>
class Concurrency::_Join_node< _Type, _Destination_type, _Jtype >
Defines a block allowing sources of distinct types to be joined. Join node is a single-target, multi-source ordered propagator block
- Template Parameters
-
_Type | The payload tuple type |
_Jtype | The kind of join this is, either 'greedy' or 'non-greedy' |