Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
De source_block klasse is een abstracte basisklasse voor alleen bronblokken. De klasse biedt eenvoudige functionaliteit voor koppelingsbeheer en veelvoorkomende foutcontroles.
Syntaxis
template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;
Parameterwaarden
_TargetLinkRegistry
Linkregister dat gebruikt moet worden voor het opslaan van de doelkoppelingen.
_MessageProcessorType
Processortype voor berichtverwerking.
Leden
Openbare typedefs
| Naam | Description |
|---|---|
target_iterator |
De iterator om de verbonden doelen te doorlopen. |
Openbare constructors
| Naam | Description |
|---|---|
| source_block | Maakt een source_block object. |
| ~source_block Destructor | Vernietigt het source_block object. |
Openbare methoden
| Naam | Description |
|---|---|
| accepteren | Accepteert een bericht dat door dit source_block object is aangeboden, waardoor het eigendom wordt overgedragen aan de beller. |
| acquire_ref | Hiermee verkrijgt u een verwijzingsaantal voor dit source_block object om verwijdering te voorkomen. |
| verbruiken | Gebruikt een bericht dat eerder door dit source_block object is aangeboden en is gereserveerd door het doel, waardoor het eigendom wordt overgedragen aan de beller. |
| link_target | Hiermee koppelt u een doelblok aan dit source_block object. |
| release | Intrekt een vorige succesvolle berichtreservering. |
| release_ref | Geeft een verwijzingsaantal op dit source_block object. |
| Reserve | Reserveert een bericht dat eerder door dit source_block object is aangeboden. |
| doel ontkoppelen | Hiermee ontkoppelt u een doelblok van dit source_block object. |
| unlink_targets | Hiermee ontkoppelt u alle doelblokken van dit source_block object. (Overschrijft ISource::unlink_targets.) |
Beveiligde methoden
| Naam | Description |
|---|---|
| accept_message | Wanneer deze in een afgeleide klasse wordt overschreven, accepteert hij een aangeboden bericht van de bron. Berichtblokken moeten deze methode overschrijven om het _MsgId bericht te valideren en te retourneren. |
| async_send | Plaatst berichten asynchroon in de wachtrij en start een doorgiftetaak, als dit nog niet is gedaan. |
| consume_message | Wanneer overschreven in een afgeleide klasse, wordt een eerder gereserveerd bericht verwerkt. |
| verwerking_in_batches_inschakelen | Hiermee schakelt u batchverwerking voor dit blok in. |
| initialize_source | Initialiseert het message_propagator binnen dit source_block. |
| link_doelmelding | Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit source_block object. |
| process_input_messages | Invoerberichten verwerken. Dit is alleen nuttig voor propagatorblokken, die zijn afgeleid van source_block. |
| propagate_output_messages | Berichten verspreiden naar ontvangers. |
| doorgeven_aan_alle_doelen | Als het wordt overschreven in een afgeleide klasse, geeft het het opgegeven bericht door aan een of alle gekoppelde targets. Dit is de belangrijkste doorgifteroutine voor berichtblokken. |
| release_message | Wanneer deze wordt overschreven in een afgeleide klasse, wordt een eerdere berichtreservering vrijgegeven. |
| remove_targets | Hiermee verwijdert u alle doelkoppelingen voor dit bronblok. Dit moet worden aangeroepen vanuit de destructor. |
| reserve_message | Wanneer deze wordt overschreven in een afgeleide klasse, reserveert u een bericht dat eerder door dit source_block object is aangeboden. |
| resume_propagation | Wanneer deze wordt overschreven in een afgeleide klasse, wordt de doorgifte hervat nadat een reservering is vrijgegeven. |
| sync_send | Hiermee worden berichten synchroon in de wachtrij geplaatst en wordt een propagatietaak gestart, indien dit nog niet is uitgevoerd. |
| unlink_target_notification | Een callback waarmee wordt aangegeven dat een doel is ontkoppeld van dit source_block object. |
| wachten_op_uitstaande_asynchrone_verzendingen | Wacht totdat alle asynchrone propagaties zijn voltooid. Deze doorgiftespecifieke spinwachttijd wordt gebruikt in destructors van berichtblokken om ervoor te zorgen dat alle asynchrone doorgiften tijd hebben om te voltooien voordat het blok wordt vernietigd. |
Opmerkingen
Berichtblokken moeten worden afgeleid van dit blok om te profiteren van koppelingsbeheer en synchronisatie die door deze klasse wordt geleverd.
Overnamehiƫrarchie
source_block
Requirements
Header: agents.h
Naamruimte: concurrentie
accepteren
Accepteert een bericht dat door dit source_block object is aangeboden, waardoor het eigendom wordt overgedragen aan de beller.
virtual message<_Target_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity van het aangeboden message object.
_PTarget
Een aanwijzer naar het doelblok dat de accept methode aanroept.
Retourwaarde
Een aanwijzer naar het message object waarvan de aanroeper nu eigenaar is.
Opmerkingen
De methode genereert een invalid_argument uitzondering als de parameter _PTarget is NULL.
De accept methode wordt aangeroepen door een doel terwijl een bericht wordt aangeboden door dit ISource blok. De geretourneerde berichtpointer kan afwijken van de aanwijzer die is doorgegeven aan de propagate methode van het ITarget blok, als deze bron besluit een kopie van het bericht te maken.
accepteer_bericht
Wanneer deze in een afgeleide klasse wordt overschreven, accepteert hij een aangeboden bericht van de bron. Berichtblokken moeten deze methode overschrijven om het _MsgId bericht te valideren en te retourneren.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Parameterwaarden
_MsgId
De runtime-objectidentiteit van het message object.
Retourwaarde
Een aanwijzer naar het bericht waarvan de beller nu eigenaar is.
Opmerkingen
Als u het eigendom wilt overdragen, moet de oorspronkelijke berichtpointer worden geretourneerd. Als u het eigendom wilt behouden, dient er een kopie van de berichtlading te worden gemaakt en geretourneerd.
acquire_ref
Hiermee verkrijgt u een verwijzingsaantal voor dit source_block object om verwijdering te voorkomen.
virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);
Opmerkingen
Deze methode wordt aangeroepen door een ITarget object dat tijdens de link_target methode aan deze bron wordt gekoppeld.
async_send
Plaatst berichten asynchroon in de wachtrij en start een doorgiftetaak, als dit nog niet is gedaan.
virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);
Parameterwaarden
_Msg
Een aanwijzer naar een message object om asynchroon te verzenden.
Verbruiken
Gebruikt een bericht dat eerder door dit source_block object is aangeboden en is gereserveerd door het doel, waardoor het eigendom wordt overgedragen aan de beller.
virtual message<_Target_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity van het gereserveerde message-object.
_PTarget
Een aanwijzer naar het doelblok dat de consume methode aanroept.
Retourwaarde
Een aanwijzer naar het message object waarvan de aanroeper nu eigenaar is.
Opmerkingen
De methode genereert een invalid_argument uitzondering als de parameter _PTarget is NULL.
De methode genereert een bad_target uitzondering als de parameter _PTarget niet het doel vertegenwoordigt dat wordt aangeroepen reserve.
De consume methode is vergelijkbaar met accept, maar moet altijd worden voorafgegaan door een aanroep van reserve die true retourneerde.
consume_message
Wanneer overschreven in een afgeleide klasse, wordt een eerder gereserveerd bericht verwerkt.
virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;
Parameterwaarden
_MsgId
Het runtime_object_identity van het message-object dat wordt gebruikt.
Retourwaarde
Een aanwijzer naar het bericht waarvan de beller nu eigenaar is.
Opmerkingen
Vergelijkbaar met accept, maar wordt altijd voorafgegaan door een aanroep naar reserve.
de_batchverwerking_inschakelen
Hiermee schakelt u batchverwerking voor dit blok in.
void enable_batched_processing();
bron_initialiseren
Initialiseert het message_propagator binnen dit source_block.
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Parameterwaarden
_PScheduler
De planner die moet worden gebruikt voor het plannen van taken.
_PScheduleGroup
De planningsgroep die moet worden gebruikt voor het plannen van taken.
link_target
Hiermee koppelt u een doelblok aan dit source_block object.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar een ITarget blok om een koppeling naar dit source_block object te maken.
Opmerkingen
De methode genereert een invalid_argument uitzondering als de parameter _PTarget is NULL.
link_doel_melding
Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit source_block object.
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
verwerk_invoersberichten
Invoerberichten verwerken. Dit is alleen nuttig voor propagatorblokken, die zijn afgeleid van source_block.
virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);
Parameterwaarden
_PMessage
Een aanwijzer naar het bericht dat moet worden verwerkt.
output_berichten_doorgeven
Berichten verspreiden naar ontvangers.
virtual void propagate_output_messages();
propageren_naar_alle_doelen
Als het wordt overschreven in een afgeleide klasse, geeft het het opgegeven bericht door aan een of alle gekoppelde targets. Dit is de belangrijkste doorgifteroutine voor berichtblokken.
virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);
Parameterwaarden
_PMessage
Een aanwijzer naar het bericht dat moet worden doorgegeven.
vrijgave
Intrekt een vorige succesvolle berichtreservering.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity van het gereserveerde message-object.
_PTarget
Een aanwijzer naar het doelblok dat de release methode aanroept.
Opmerkingen
De methode genereert een invalid_argument uitzondering als de parameter _PTarget is NULL.
De methode genereert een bad_target uitzondering als de parameter _PTarget niet het doel vertegenwoordigt dat wordt aangeroepen reserve.
releasemededeling
Wanneer deze wordt overschreven in een afgeleide klasse, wordt een eerdere berichtreservering vrijgegeven.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Parameterwaarden
_MsgId
Het runtime_object_identity object message dat wordt vrijgegeven.
release_ref
Geeft een verwijzingsaantal op dit source_block object.
virtual void release_ref(_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar het doelblok dat deze methode aanroept.
Opmerkingen
Deze methode wordt aangeroepen door een ITarget object dat niet is gekoppeld vanuit deze bron. Het bronblok mag alle resources vrijgeven die zijn gereserveerd voor het doelblok.
remove_targets
Hiermee verwijdert u alle doelkoppelingen voor dit bronblok. Dit moet worden aangeroepen vanuit de destructor.
void remove_targets();
reserve
Reserveert een bericht dat eerder door dit source_block object is aangeboden.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity van het aangeboden message object.
_PTarget
Een aanwijzer naar het doelblok dat de reserve methode aanroept.
Retourwaarde
true als het bericht succesvol is gereserveerd, false anders. Reserveringen kunnen om verschillende redenen mislukken, waaronder: het bericht is al gereserveerd of geaccepteerd door een ander doel, de bron kan reserveringen weigeren, enzovoort.
Opmerkingen
De methode genereert een invalid_argument uitzondering als de parameter _PTarget is NULL.
Nadat u hebt gebeld reserve, moet u, als het lukt, bellen consume of release om respectievelijk het bericht in te nemen of op te geven.
reserve_message
Wanneer deze wordt overschreven in een afgeleide klasse, reserveert u een bericht dat eerder door dit source_block object is aangeboden.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
Parameterwaarden
_MsgId
runtime_object_identity van het message object dat wordt gereserveerd.
Retourwaarde
true als het bericht succesvol is gereserveerd, false anders.
Opmerkingen
Nadat reserve is aangeroepen en true wordt geretourneerd, moet ofwel consume of release worden aangeroepen om het eigendom van het bericht over te nemen of vrij te geven.
resume_propagation
Wanneer deze wordt overschreven in een afgeleide klasse, wordt de doorgifte hervat nadat een reservering is vrijgegeven.
virtual void resume_propagation() = 0;
source_block
Maakt een source_block object.
source_block();
~source_block
Vernietigt het source_block object.
virtual ~source_block();
sync_send
Hiermee worden berichten synchroon in de wachtrij geplaatst en wordt een propagatietaak gestart, indien dit nog niet is uitgevoerd.
virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);
Parameterwaarden
_Msg
Een aanwijzer naar een message object om synchroon te verzenden.
unlink_target
Hiermee ontkoppelt u een doelblok van dit source_block object.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar een ITarget blok om de koppeling van dit source_block object op te heffen.
Opmerkingen
De methode genereert een invalid_argument uitzondering als de parameter _PTarget is NULL.
melding voor doel ontkoppeling
Een callback waarmee wordt aangegeven dat een doel is ontkoppeld van dit source_block object.
virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);
Parameterwaarden
_PTarget
Het ITarget blok dat niet is gekoppeld.
ontkoppel_doelen
Hiermee ontkoppelt u alle doelblokken van dit source_block object.
virtual void unlink_targets();
wachten_op_uitstaande_asynchrone_verzendingen
Wacht totdat alle asynchrone propagaties zijn voltooid. Deze doorgiftespecifieke spinwachttijd wordt gebruikt in destructors van berichtblokken om ervoor te zorgen dat alle asynchrone doorgiften tijd hebben om te voltooien voordat het blok wordt vernietigd.
void wait_for_outstanding_async_sends();