Share via


source_block-klasse

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

ISource

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.

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.

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.

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.

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.

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();

Zie ook

concurrentie Namespace
ISource-klasse