source_block — Klasa

Klasa source_block jest abstrakcyjną klasą bazową dla bloków tylko do źródła. Klasa udostępnia podstawowe funkcje zarządzania linkami, a także typowe kontrole błędów.

Składnia

template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;

Parametry

_TargetLinkRegistry
Rejestr łączy, który ma być używany do przechowywania linków docelowych.

_MessageProcessorType
Typ procesora do przetwarzania komunikatów.

Członkowie

Definicje typów publicznych

Nazwa/nazwisko opis
target_iterator Iterator do chodzenia połączonych obiektów docelowych.

Konstruktory publiczne

Nazwa/nazwisko opis
source_block source_block Tworzy obiekt.
~source_block Destruktor source_block Niszczy obiekt.

Metody publiczne

Nazwa/nazwisko opis
Zaakceptować Akceptuje komunikat oferowany przez ten source_block obiekt, przenosząc własność do obiektu wywołującego.
acquire_ref Uzyskuje liczbę odwołań dla tego source_block obiektu, aby zapobiec usunięciu.
Zużywają Używa komunikatu oferowanego wcześniej przez ten source_block obiekt i pomyślnie zarezerwowanego przez obiekt docelowy, przenosząc własność do obiektu wywołującego.
link_target Łączy blok docelowy z tym source_block obiektem.
Wydania Zwalnia poprzednią pomyślną rezerwację komunikatów.
release_ref Zwalnia liczbę odwołań dla tego source_block obiektu.
Rezerwy Rezerwuje komunikat wcześniej oferowany przez ten source_block obiekt.
unlink_target Odłącza blok docelowy od tego source_block obiektu.
unlink_targets Odłącza wszystkie bloki docelowe z tego source_block obiektu. (Przesłonięcia) ISource::unlink_targets.)

Metody chronione

Nazwa/nazwisko opis
accept_message Po zastąpieniu w klasie pochodnej akceptuje oferowany komunikat przez źródło. Bloki komunikatów powinny zastąpić tę metodę, aby zweryfikować _MsgId i zwrócić komunikat.
async_send Asynchronicznie kolejkuje komunikaty i uruchamia zadanie propagacji, jeśli jeszcze tego nie zrobiono
consume_message Po zastąpieniu w klasie pochodnej używa komunikatu, który był wcześniej zarezerwowany.
enable_batched_processing Włącza przetwarzanie wsadowe dla tego bloku.
initialize_source Inicjuje element message_propagator w tym source_blockobiekcie .
link_target_notification Wywołanie zwrotne, które powiadamia o tym, że nowy obiekt docelowy został połączony z tym source_block obiektem.
process_input_messages Przetwarzanie komunikatów wejściowych. Jest to przydatne tylko w przypadku bloków propagacji, które pochodzą z source_block
propagate_output_messages Propagacja komunikatów do elementów docelowych.
propagate_to_any_targets Po zastąpieniu w klasie pochodnej propaguje dany komunikat do dowolnych lub wszystkich połączonych obiektów docelowych. Jest to główna rutyna propagacji bloków komunikatów.
release_message Po zastąpieniu w klasie pochodnej zwalnia poprzednią rezerwację komunikatów.
remove_targets Usuwa wszystkie łącza docelowe dla tego bloku źródłowego. Należy to wywołać z destruktora.
reserve_message Po zastąpieniu w klasie pochodnej rezerwuje komunikat wcześniej oferowany przez ten source_block obiekt.
resume_propagation Po zastąpieniu klasy pochodnej propagacja jest wznawiana po wydaniu rezerwacji.
sync_send Synchronicznie kolejkuje komunikaty i uruchamia zadanie propagacji, jeśli jeszcze tego nie zrobiono.
unlink_target_notification Wywołanie zwrotne, które powiadamia, że obiekt docelowy został odłączony od tego source_block obiektu.
wait_for_outstanding_async_sends Czeka na ukończenie wszystkich propagacji asynchronicznych. To oczekiwanie spin specyficzne dla propagatora jest używane w destruktorach bloków komunikatów, aby upewnić się, że wszystkie propagacje asynchroniczne mają czas na zakończenie przed zniszczeniem bloku.

Uwagi

Bloki komunikatów powinny pochodzić z tego bloku, aby korzystać z zarządzania linkami i synchronizacji dostarczonej przez tę klasę.

Hierarchia dziedziczenia

Isource

source_block

Wymagania

Nagłówek: agents.h

Przestrzeń nazw: współbieżność

akceptuj

Akceptuje komunikat oferowany przez ten source_block obiekt, przenosząc własność do obiektu wywołującego.

virtual message<_Target_type>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_Msgid
Obiekt runtime_object_identity oferowany message .

_PTarget
Wskaźnik do bloku docelowego wywołującego metodę accept .

Wartość zwracana

Wskaźnik do message obiektu, którego obiekt wywołujący ma teraz własność.

Uwagi

Metoda zgłasza wyjątek invalid_argument, jeśli parametr ma wartość NULL_PTarget .

Metoda jest wywoływana accept przez element docelowy, gdy komunikat jest oferowany przez ten ISource blok. Zwrócony wskaźnik komunikatu może różnić się od tego, który został przekazany do propagate metody ITarget bloku, jeśli to źródło zdecyduje się utworzyć kopię komunikatu.

accept_message

Po zastąpieniu w klasie pochodnej akceptuje oferowany komunikat przez źródło. Bloki komunikatów powinny zastąpić tę metodę, aby zweryfikować _MsgId i zwrócić komunikat.

virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;

Parametry

_Msgid
Tożsamość obiektu środowiska uruchomieniowego message obiektu.

Wartość zwracana

Wskaźnik do komunikatu, że obiekt wywołujący ma teraz własność.

Uwagi

Aby przenieść własność, należy zwrócić oryginalny wskaźnik komunikatu. Aby zachować własność, należy wykonać i zwrócić kopię ładunku komunikatu.

acquire_ref

Uzyskuje liczbę odwołań dla tego source_block obiektu, aby zapobiec usunięciu.

virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);

Uwagi

Ta metoda jest wywoływana przez ITarget obiekt połączony z tym źródłem podczas link_target metody .

async_send

Asynchronicznie kolejkuje komunikaty i uruchamia zadanie propagacji, jeśli jeszcze tego nie zrobiono

virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);

Parametry

_Msg
Wskaźnik do message obiektu do asynchronicznego wysyłania.

consume

Używa komunikatu oferowanego wcześniej przez ten source_block obiekt i pomyślnie zarezerwowanego przez obiekt docelowy, przenosząc własność do obiektu wywołującego.

virtual message<_Target_type>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_Msgid
Obiekt runtime_object_identity zarezerwowany message .

_PTarget
Wskaźnik do bloku docelowego wywołującego metodę consume .

Wartość zwracana

Wskaźnik do message obiektu, którego obiekt wywołujący ma teraz własność.

Uwagi

Metoda zgłasza wyjątek invalid_argument, jeśli parametr ma wartość NULL_PTarget .

Metoda zgłasza wyjątek bad_target , jeśli parametr _PTarget nie reprezentuje obiektu docelowego o nazwie reserve.

Metoda jest podobna consume do acceptmetody , ale zawsze musi być poprzedzona wywołaniem metody , która reserve zwróciła truewartość .

consume_message

Po zastąpieniu w klasie pochodnej używa komunikatu, który był wcześniej zarezerwowany.

virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;

Parametry

_Msgid
Obiekt runtime_object_identity , który message jest używany.

Wartość zwracana

Wskaźnik do komunikatu, że obiekt wywołujący ma teraz własność.

Uwagi

Podobnie jak acceptelement , ale zawsze jest poprzedzony wywołaniem metody reserve.

enable_batched_processing

Włącza przetwarzanie wsadowe dla tego bloku.

void enable_batched_processing();

initialize_source

Inicjuje element message_propagator w tym source_blockobiekcie .

void initialize_source(
    _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ń.

Łączy blok docelowy z tym source_block obiektem.

virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_PTarget
Wskaźnik do bloku, aby połączyć się z tym source_block obiektemITarget.

Uwagi

Metoda zgłasza wyjątek invalid_argument, jeśli parametr ma wartość NULL_PTarget .

Wywołanie zwrotne, które powiadamia o tym, że nowy obiekt docelowy został połączony z tym source_block obiektem.

virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);

process_input_messages

Przetwarzanie komunikatów wejściowych. Jest to przydatne tylko w przypadku bloków propagacji, które pochodzą z source_block

virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);

Parametry

_PMessage
Wskaźnik do komunikatu, który ma zostać przetworzony.

propagate_output_messages

Propagacja komunikatów do elementów docelowych.

virtual void propagate_output_messages();

propagate_to_any_targets

Po zastąpieniu w klasie pochodnej propaguje dany komunikat do dowolnych lub wszystkich połączonych obiektów docelowych. Jest to główna rutyna propagacji bloków komunikatów.

virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);

Parametry

_PMessage
Wskaźnik do komunikatu, który ma zostać rozpropagowany.

Wydania

Zwalnia poprzednią pomyślną rezerwację komunikatów.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_Msgid
Obiekt runtime_object_identity zarezerwowany message .

_PTarget
Wskaźnik do bloku docelowego wywołującego metodę release .

Uwagi

Metoda zgłasza wyjątek invalid_argument, jeśli parametr ma wartość NULL_PTarget .

Metoda zgłasza wyjątek bad_target , jeśli parametr _PTarget nie reprezentuje obiektu docelowego o nazwie reserve.

release_message

Po zastąpieniu w klasie pochodnej zwalnia poprzednią rezerwację komunikatów.

virtual void release_message(runtime_object_identity _MsgId) = 0;

Parametry

_Msgid
message Obiektruntime_object_identity, który jest zwalniany.

release_ref

Zwalnia liczbę odwołań dla tego source_block obiektu.

virtual void release_ref(_Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_PTarget
Wskaźnik do bloku docelowego wywołującego tę metodę.

Uwagi

Ta metoda jest wywoływana przez ITarget obiekt, który jest odłączony od tego źródła. Blok źródłowy może zwolnić wszystkie zasoby zarezerwowane dla bloku docelowego.

remove_targets

Usuwa wszystkie łącza docelowe dla tego bloku źródłowego. Należy to wywołać z destruktora.

void remove_targets();

Rezerwy

Rezerwuje komunikat wcześniej oferowany przez ten source_block obiekt.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_Msgid
Obiekt runtime_object_identity oferowany message .

_PTarget
Wskaźnik do bloku docelowego wywołującego metodę reserve .

Wartość zwracana

true jeśli wiadomość została pomyślnie zarezerwowana, false w przeciwnym razie. Rezerwacje mogą zakończyć się niepowodzeniem z wielu powodów, w tym: komunikat został już zarezerwowany lub zaakceptowany przez inny obiekt docelowy, źródło może odmówić rezerwacji itd.

Uwagi

Metoda zgłasza wyjątek invalid_argument, jeśli parametr ma wartość NULL_PTarget .

Po wywołaniu reservemetody , jeśli się powiedzie, musisz zadzwonić consume do lub release w celu podjęcia lub rezygnacji z posiadania wiadomości, odpowiednio.

reserve_message

Po zastąpieniu w klasie pochodnej rezerwuje komunikat wcześniej oferowany przez ten source_block obiekt.

virtual bool reserve_message(runtime_object_identity _MsgId) = 0;

Parametry

_Msgid
Obiekt runtime_object_identitymessage , który jest zarezerwowany.

Wartość zwracana

true jeśli wiadomość została pomyślnie zarezerwowana, false w przeciwnym razie.

Uwagi

Po reserve wywołaniu metody , jeśli zwraca truewartość , consume albo release musi zostać wywołana, aby przejąć lub zwolnić własność komunikatu.

resume_propagation

Po zastąpieniu klasy pochodnej propagacja jest wznawiana po wydaniu rezerwacji.

virtual void resume_propagation() = 0;

source_block

source_block Tworzy obiekt.

source_block();

~source_block

source_block Niszczy obiekt.

virtual ~source_block();

sync_send

Synchronicznie kolejkuje komunikaty i uruchamia zadanie propagacji, jeśli jeszcze tego nie zrobiono.

virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);

Parametry

_Msg
Wskaźnik do message obiektu do synchronicznego wysyłania.

Odłącza blok docelowy od tego source_block obiektu.

virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_PTarget
Wskaźnik do ITarget bloku, aby odłączyć się od tego source_block obiektu.

Uwagi

Metoda zgłasza wyjątek invalid_argument, jeśli parametr ma wartość NULL_PTarget .

Wywołanie zwrotne, które powiadamia, że obiekt docelowy został odłączony od tego source_block obiektu.

virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);

Parametry

_PTarget
Blok ITarget , który został odłączony.

Odłącza wszystkie bloki docelowe z tego source_block obiektu.

virtual void unlink_targets();

wait_for_outstanding_async_sends

Czeka na ukończenie wszystkich propagacji asynchronicznych. To oczekiwanie spin specyficzne dla propagatora jest używane w destruktorach bloków komunikatów, aby upewnić się, że wszystkie propagacje asynchroniczne mają czas na zakończenie przed zniszczeniem bloku.

void wait_for_outstanding_async_sends();

Zobacz też

Przestrzeń nazw współbieżności
ISource, klasa