Be Book Application Kit Application Kit Indeks

BMessenger

Pochodzi od: żaden
Zadeklarowany w:  be/app/Messenger.h
Biblioteka: libbe.so
Alokacja: stos lub konstruktor
Podsumowanie:  więcej...

 

BMessenger (posłaniec) reprezentuje i wysyła komunikaty do adresata komunikatu, gdzie adresatem jest BLooper i, opcjonalnie, określony BHandler w tym looper'ze. Adresat może przebywać w tej samej aplikacji jako BMessenger (lokalny adresat) albo może przebywać w jakiejś innej aplikacja (zdalny adresat).

Najbardziej znacząca funkcją BMessenger'a jest SendMessage(), która wysyła jego argument BMessage do adresata.

Dla lokalnego adresata, SendMessage() jest z grubsza równoważna, jeżeli chodzi o skuteczność, wysyłaniu wiadomości bezpośrednio do adresata BMessenger'a (tj. BLooper::PostMessage()).

Globalny wskaźnik be_app_messenger BMessenger'a, który adresuje główną pętlę komunikatu zmiennej globalnej be_app, automatycznie jest inicjalizowany za Ciebie kiedy tworzysz swój obiekt BApplication. Możesz użyć go wszędzie tam gdzie są wywoływane BMessenger'y.


Konstruktor i Destruktor


BMessenger()

BMessenger(const BHandler *handler,
      const BLooper *looper = NULL,
      status_t *error = NULL)
BMessenger(const char *signature,
      team_id team = -1,
      status_t *error = NULL)
BMessenger(const BMessenger &messenger)
BMessenger(void)

Tworzy nowy BMessenger i ustawia jego adresata na lokalny looper/handler, aplikacji (działającej) określonej przez sygnaturę signature lub zespół team lub na adresata jakiegoś innego posłańca messenger.

Komunikaty wysłane do zdalnego adresata są odbierane i obsługiwane przez obiekt zdalnej aplikacji BApplication.

BMessenger nie posiada jego adresata.

ZWRACANE KODY

Konstruktor umieszcza kod błędu w argumencie error (jeśli był dostarczony).


~BMessenger()

~BMessenger()

Zwalnia obiekt BMessenger; adresat nie jest naruszany.


Funkcje Członkowskie


IsTargetLocal() patrz Target()


IsValid()

bool IsValid(void) const

Zwraca true jeśli docelowy looper, czy to lokalny czy zdalny, nadal istnieje.

  Ta funkcja nie mówi Ci, czy looper jest rzeczywiście gotowy, by odebrać komunikat lub czy handler (jeśli zostało on określony w konstruktorze) istnieje. Inaczej mówiąc , prawidłowy BMessenger nie jest żadną gwarancją, że komunikat rzeczywiście zostanie dostarczony adresatowi.


LockTarget(), LockTargetWithTimeout()

bool LockTarget(void) const
status_t LockTargetWithTimeout(bigtime_t timeout) const

  Te funkcje odnoszą się tylko do lokalnych adresatów.

Te funkcje usiłują, zablokować docelowy looper w taki sposób jak podobnie nazwane funkcje BLooper'a (patrz BLooper::LockTarget()). Dodatkowo do kodów błędów tam zgłaszanych, te funkcje zwracają false i B_BAD_VALUE (odpowiednio) jeśli adresat nie jest lokalny albo jeśli w przeciwnym razie looper jest nieprawidłowy.


SendMessage()

status_t SendMessage(BMessage *message,
      BMessage *reply,
      bigtime_t deliveryTimeout = B_INFINITE_TIMEOUT,
      bigtime_t replyTimeout = B_INFINITE_TIMEOUT) const
status_t SendMessage(BMessage *message,
      BHandler *replyHandler = NULL,
      bigtime_t deliveryTimeout = B_INFINITE_TIMEOUT) const
status_t SendMessage(BMessage *message,
      BMessenger *replyMessenger,
      bigtime_t deliveryTimeout = B_INFINITE_TIMEOUT) const
status_t SendMessage(uint32 command, BMessage *reply) const
status_t SendMessage(uint32 command, BHandler *replyHandler = NULL) const

Wysyła kopię komunikatu message (lub BMessage oparty na stałej polecenia command) do adresata obiektu. Wywołujący zachowuje na własność komunikat message. Funkcja nie zwraca wartości dopóki komnikat nie dostanie dostraczony; jeśli wysyłasz komunikat message (w przeciwieństwie do stałej polecenia command) możesz ustawićprzerwę dostawy w mikrosekundach poprzez argument deliveryTimeout.

Adresat może odpowiedzieć na komunikat:

Bądź ostrożny gdy żądasz odpowiedzi synchronicznej: jeśli wywołasz SendMessage() z wątku docelowego looper'a, nastąpi zakleszczenie (lub w najlepszym wypadku przerwa).

ZWRACANE KODY

Jeśli określiłeś handler handler gdy konstruowałeś swój BMessenger i, jeśli ten handler odtąd zmienił looper'y, SendMessage() nie dostarczy jego komunikatu, ale nie zgłosi ona zastrzeżeń ( zwraca ona B_OK).


Target(), IsTargetLocal(), Team()

BHandler *Target(BLooper **looper) const
bool IsTargetLocal(void) const
inline team_id Team(void) const

Target() zwraca handler BMessenger'a (bezpośrednio) i looper (przez przekazanie go w argumencie looper). Ta funkcja działa tylko dla adresató lokalnych. Jeśli Target() zwraca NULL, to może oznaczać jedną z czterech rzeczy:

IsTargetLocal() zwraca wartość równą true jeśli adresat jest lokalny. Team() zwraca zespół adresata.


Team() patrz Target()


Operatory


= (przypisanie)

BMessenger &operator =(const BMessenger&)

Przypisuje lewą stronę adresata BMessenger'a do tej z prawej strony obiektu.


== (równość)

bool operator ==(const BMessenger&) const

Dwa obiekty typu BMessenger są równe jeśli mają takich samych adresatów.


Be Book Application Kit Application Kit Indeks

Be Book,
...w ślicznym HTML...
dla BeOS wydanie 5

Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.