target_block — Klasa
Klasa target_block
jest abstrakcyjną klasą bazową, która zapewnia podstawowe funkcje zarządzania linkami i sprawdzanie błędów tylko dla bloków docelowych.
Składnia
template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;
Parametry
_SourceLinkRegistry
Rejestr łączy, który ma być używany do przechowywania linków źródłowych.
_MessageProcessorType
Typ procesora do przetwarzania komunikatów.
Elementy członkowskie
Definicje typów publicznych
Nazwa/nazwisko | opis |
---|---|
source_iterator |
Typ iteratora dla source_link_manager tego target_block obiektu. |
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
target_block | target_block Tworzy obiekt. |
~target_block Destruktor | target_block Niszczy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
Propagowanie | Asynchronicznie przekazuje komunikat z bloku źródłowego do tego bloku docelowego. |
Wyślij | Synchronicznie przekazuje komunikat z bloku źródłowego do tego bloku docelowego. |
Metody chronione
Nazwa/nazwisko | opis |
---|---|
async_send | Asynchronicznie wysyła komunikat do przetwarzania. |
decline_incoming_messages | Wskazuje blok, że nowe komunikaty powinny zostać odrzucone. |
enable_batched_processing | Włącza przetwarzanie wsadowe dla tego bloku. |
initialize_target | Inicjuje obiekt podstawowy. W szczególności message_processor należy zainicjować obiekt. |
link_source | Łączy określony blok źródłowy z tym target_block obiektem. |
process_input_messages | Przetwarza komunikaty odbierane jako dane wejściowe. |
process_message | Po przesłonięciu w klasie pochodnej przetwarza komunikat akceptowany przez ten target_block obiekt. |
propagate_message | Po zastąpieniu w klasie pochodnej ta metoda asynchronicznie przekazuje komunikat z ISource bloku do tego target_block obiektu. Jest wywoływana przez metodę propagate , gdy jest wywoływana przez blok źródłowy. |
register_filter | Rejestruje metodę filtru, która zostanie wywołana dla każdego odebranego komunikatu. |
remove_sources | Odłącza wszystkie źródła po oczekiwaniu na ukończenie oczekujących operacji asynchronicznych wysyłania. |
send_message | Po zastąpieniu w klasie pochodnej ta metoda synchronicznie przekazuje komunikat z ISource bloku do tego target_block obiektu. Jest wywoływana przez metodę send , gdy jest wywoływana przez blok źródłowy. |
sync_send | Synchronicznie wyślij komunikat do przetwarzania. |
unlink_source | Odłącza określony blok źródłowy od tego target_block obiektu. |
unlink_sources | Odłącza wszystkie bloki źródłowe z tego target_block obiektu. (Przesłonięcia) ITarget::unlink_sources.) |
wait_for_async_sends | Czeka na ukończenie wszystkich propagacji asynchronicznych. |
Hierarchia dziedziczenia
target_block
Wymagania
Nagłówek: agents.h
Przestrzeń nazw: współbieżność
async_send
Asynchronicznie wysyła komunikat do przetwarzania.
void async_send(_Inout_opt_ message<_Source_type>* _PMessage);
Parametry
_PMessage
Wskaźnik do wysyłanej wiadomości.
decline_incoming_messages
Wskazuje blok, że nowe komunikaty powinny zostać odrzucone.
void decline_incoming_messages();
Uwagi
Ta metoda jest wywoływana przez destruktor, aby upewnić się, że nowe komunikaty są odrzucane, gdy trwa niszczenie.
enable_batched_processing
Włącza przetwarzanie wsadowe dla tego bloku.
void enable_batched_processing();
initialize_target
Inicjuje obiekt podstawowy. W szczególności message_processor
należy zainicjować obiekt.
void initialize_target(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Parametry
_PScheduler
Harmonogram, który ma być używany do planowania zadań.
_PScheduleGroup
Grupa harmonogramu, która ma być używana do planowania zadań.
link_source
Łączy określony blok źródłowy z tym target_block
obiektem.
virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);
Parametry
_PSource
Wskaźnik do ISource
bloku, który ma być połączony.
Uwagi
Ta funkcja nie powinna być wywoływana target_block
bezpośrednio w obiekcie. Bloki powinny być połączone ze sobą przy użyciu link_target
metody w ISource
blokach, która wywoła metodę link_source
w odpowiednim obiekcie docelowym.
process_input_messages
Przetwarza komunikaty odbierane jako dane wejściowe.
virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);
Parametry
_PMessage
Wskaźnik do komunikatu, który ma zostać przetworzony.
process_message
Po przesłonięciu w klasie pochodnej przetwarza komunikat akceptowany przez ten target_block
obiekt.
virtual void process_message(message<_Source_type> *);
Propagowanie
Asynchronicznie przekazuje komunikat z bloku źródłowego do tego bloku docelowego.
virtual message_status propagate(
_Inout_opt_ message<_Source_type>* _PMessage,
_Inout_opt_ ISource<_Source_type>* _PSource);
Parametry
_PMessage
Wskaźnik do message
obiektu.
_PSource
Wskaźnik do bloku źródłowego oferującego komunikat.
Wartość zwracana
Message_status wskazanie, co cel postanowił zrobić z komunikatem.
Uwagi
Metoda zgłasza wyjątek invalid_argument, jeśli _PMessage
parametr lub _PSource
ma wartość NULL
.
propagate_message
Po zastąpieniu w klasie pochodnej ta metoda asynchronicznie przekazuje komunikat z ISource
bloku do tego target_block
obiektu. Jest wywoływana przez metodę propagate
, gdy jest wywoływana przez blok źródłowy.
virtual message_status propagate_message(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource) = 0;
Parametry
_PMessage
Wskaźnik do message
obiektu.
_PSource
Wskaźnik do bloku źródłowego oferującego komunikat.
Wartość zwracana
Message_status wskazanie, co cel postanowił zrobić z komunikatem.
register_filter
Rejestruje metodę filtru, która zostanie wywołana dla każdego odebranego komunikatu.
void register_filter(filter_method const& _Filter);
Parametry
_Filtr
Metoda filter.
remove_sources
Odłącza wszystkie źródła po oczekiwaniu na ukończenie oczekujących operacji asynchronicznych wysyłania.
void remove_sources();
Uwagi
Wszystkie bloki docelowe powinny wywoływać tę procedurę, aby usunąć źródła w ich destruktora.
Wyślij
Synchronicznie przekazuje komunikat z bloku źródłowego do tego bloku docelowego.
virtual message_status send(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource);
Parametry
_PMessage
Wskaźnik do message
obiektu.
_PSource
Wskaźnik do bloku źródłowego oferującego komunikat.
Wartość zwracana
Message_status wskazanie, co cel postanowił zrobić z komunikatem.
Uwagi
Metoda zgłasza wyjątek invalid_argument, jeśli _PMessage
parametr lub _PSource
ma wartość NULL
.
send
Użycie metody poza inicjowaniem komunikatów i propagowanie komunikatów w sieci jest niebezpieczne i może prowadzić do zakleszczenia.
Po send
powrocie komunikat został już zaakceptowany i przeniesiony do bloku docelowego lub został odrzucony przez element docelowy.
send_message
Po zastąpieniu w klasie pochodnej ta metoda synchronicznie przekazuje komunikat z ISource
bloku do tego target_block
obiektu. Jest wywoływana przez metodę send
, gdy jest wywoływana przez blok źródłowy.
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
Wartość zwracana
Message_status wskazanie, co cel postanowił zrobić z komunikatem.
Uwagi
Domyślnie ten blok jest zwracany declined
, chyba że zostanie zastąpiony przez klasę pochodną.
sync_send
Synchronicznie wyślij komunikat do przetwarzania.
void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);
Parametry
_PMessage
Wskaźnik do wysyłanej wiadomości.
target_block
target_block
Tworzy obiekt.
target_block();
~target_block
target_block
Niszczy obiekt.
virtual ~target_block();
unlink_source
Odłącza określony blok źródłowy od tego target_block
obiektu.
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
Parametry
_PSource
Wskaźnik do ISource
bloku, który ma być odłączony.
unlink_sources
Odłącza wszystkie bloki źródłowe z tego target_block
obiektu.
virtual void unlink_sources();
wait_for_async_sends
Czeka na ukończenie wszystkich propagacji asynchronicznych.
void wait_for_async_sends();
Uwagi
Ta metoda jest używana przez destruktory bloków komunikatów, aby upewnić się, że wszystkie operacje asynchroniczne miały czas na zakończenie przed zniszczeniem bloku.