| 
|   | multitype_join (_Type _Tuple) | 
|   | Constructs a multitype_join messaging block.  More...
  | 
|   | 
|   | multitype_join (multitype_join &&_Join) | 
|   | Constructs a multitype_join messaging block.  More...
  | 
|   | 
|   | ~multitype_join () | 
|   | Destroys the multitype_join messaging block.  More...
  | 
|   | 
| virtual void  | link_target (_Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Links a target block to this multitype_join messaging block.  More...
  | 
|   | 
| virtual void  | unlink_target (_Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Unlinks a target block from this multitype_join messaging block.  More...
  | 
|   | 
| virtual void  | unlink_targets () | 
|   | Unlinks all targets from this multitype_join messaging block.  More...
  | 
|   | 
| virtual message< _Destination_type > *  | accept (runtime_object_identity _MsgId, _Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Accepts a message that was offered by this multitype_join block, transferring ownership to the caller.  More...
  | 
|   | 
| virtual bool  | reserve (runtime_object_identity _MsgId, _Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Reserves a message previously offered by this multitype_join messaging block.  More...
  | 
|   | 
| virtual message< _Destination_type > *  | consume (runtime_object_identity _MsgId, _Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Consumes a message previously offered by the multitype_join messaging block and successfully reserved by the target, transferring ownership to the caller.  More...
  | 
|   | 
| virtual void  | release (runtime_object_identity _MsgId, _Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Releases a previous successful message reservation.  More...
  | 
|   | 
| virtual void  | acquire_ref (_Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Acquires a reference count on this multitype_join messaging block, to prevent deletion.  More...
  | 
|   | 
| virtual void  | release_ref (_Inout_ ITarget< _Destination_type > *_PTarget) | 
|   | Releases a reference count on this multiple_join messaging block.  More...
  | 
|   | 
| virtual  | ~ISource () | 
|   | Destroys the ISource object.  More...
  | 
|   | 
| virtual void  | link_target (_Inout_ ITarget< _Unwrap< _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< _Unwrap< _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< _Unwrap< _Type >::type > *  | accept (runtime_object_identity _MsgId, _Inout_ ITarget< _Unwrap< _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< _Unwrap< _Type >::type > *_PTarget)=0 | 
|   | When overridden in a derived class, reserves a message previously offered by this ISource block.  More...
  | 
|   | 
| virtual message< _Unwrap< _Type >::type > *  | consume (runtime_object_identity _MsgId, _Inout_ ITarget< _Unwrap< _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< _Unwrap< _Type >::type > *_PTarget)=0 | 
|   | When overridden in a derived class, releases a previous successful message reservation.  More...
  | 
|   | 
| virtual void  | acquire_ref (_Inout_ ITarget< _Unwrap< _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< _Unwrap< _Type >::type > *_PTarget)=0 | 
|   | When overridden in a derived class, releases a reference count on this ISource block.  More...
  | 
|   | 
template<typename _Type, join_type _Jtype = non_greedy>
class Concurrency::multitype_join< _Type, _Jtype >
A multitype_join messaging block is a multi-source, single-target messaging block that combines together messages of different types from each of its sources and offers a tuple of the combined messages to its targets. 
- Template Parameters
 - 
  
    | _Type | The tuple payload type of the messages joined and propagated by the block.  | 
    | _Jtype | The kind of join block this is, either greedy or non_greedy  | 
  
   
For more information, see Asynchronous Message Blocks. 
- See also
 - choice Class, join Class, join_type Enumeration, make_join Function, make_greedy_join Function, tuple Class
 
 
template<typename _Type , join_type _Jtype = non_greedy> 
 
Constructs a multitype_join messaging block. 
- Parameters
 - 
  
  
 
The runtime uses the default scheduler if you do not specify the _PScheduler  or _PScheduleGroup  parameters. 
Move construction is not performed under a lock, which means that it is up to the user to make sure that there are no light-weight tasks in flight at the time of moving. Otherwise, numerous races can occur, leading to exceptions or inconsistent state. 
- See also
 - Scheduler Class, ScheduleGroup Class
 
12609         _M_pJoinNode = 
new _Join_node<_Type, _Destination_type, _Jtype>();
 
12610         _Initialize_joins<0>();
 
#define NULL
Definition: vcruntime.h:236
 
Scheduler * _M_pScheduler
Definition: agents.h:12981
 
_Type _M_sourceTuple
Definition: agents.h:12978
 
ScheduleGroup * _M_pScheduleGroup
Definition: agents.h:12984
 
_Join_node< _Type, _Destination_type, _Jtype > * _M_pJoinNode
Definition: agents.h:12975
 
 
 
 
template<typename _Type , join_type _Jtype = non_greedy> 
 
Constructs a multitype_join messaging block. 
- Parameters
 - 
  
    | _Join | A multitype_join messaging block to copy from. Note that the original object is orphaned, making this a move constructor.  | 
  
   
The runtime uses the default scheduler if you do not specify the _PScheduler  or _PScheduleGroup  parameters. 
Move construction is not performed under a lock, which means that it is up to the user to make sure that there are no light-weight tasks in flight at the time of moving. Otherwise, numerous races can occur, leading to exceptions or inconsistent state. 
- See also
 - Scheduler Class, ScheduleGroup Class
 
12704         _Join._M_pJoinNode = 
NULL;
 
#define NULL
Definition: vcruntime.h:236
 
Scheduler * _M_pScheduler
Definition: agents.h:12981
 
_Type _M_sourceTuple
Definition: agents.h:12978
 
ScheduleGroup * _M_pScheduleGroup
Definition: agents.h:12984
 
_Join_node< _Type, _Destination_type, _Jtype > * _M_pJoinNode
Definition: agents.h:12975
 
void * _M_pSourceJoins[std::tuple_size< _Type >::value]
Definition: agents.h:12972