Sommaire du Kit d'Application     Index du Kit d'Application

BMessenger

Dérivé de : aucun

Déclaré dans : be/app/Messenger.h

Bibliothèque : libbe.so

Allocation : pile ou constructeur

Résumé

Un BMessenger représente et envoie des messages à un destinataire message ; le destinataire est un BLooper et, de manière optionnelle, un BHandler spécifique de ce looper. Le destinataire peut exister dans la même application que le BMessenger (destinataire local), ou peut se trouver dans une autre application (destinataire distant).

La fonction la plus significative du BMessenger's est SendMessage(), qui envoie l'argument BMessage au destinataire.

 
Pour un destinataire local, SendMessage() est en gros équivalent, du point de vue de l'efficacité, à poster un message directement au destinataire du BMessenger (c.a.d. BLooper::PostMessage()).


Le pointeur global de BMessenger be_app_messenger , qui cible la boucle de message principale de be_app , est automatiquement initialisé pour vous quand vous créez votre objet BApplication .. Vous pouvez l'utiliser partout où les BMessengers sont requis.


Constructeur et Destructeur


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)

Crée un nouveau BMessenger et positionne son destinataire vers un looper/handler local, vers une application (en cours d'exécution) identifiée par signature ou team, ou encore vers le destinataire d'un quelconque autre messenger.

Le BMessenger n'est pas le propriétaire du destinataire.

CODES RETOUR

Le constructeur affecte un code d'erreur à error (si ce dernier est fourni).


~BMessenger()

                                                         
  

~BMessenger()

Libère le BMessenger ; le destinataire n'est pas affecté.


Fonctions Membre


IsTargetLocal() voir Target()


IsValid()

                                                         
  

bool IsValid(void) const

Retourne true si le looper destinataire, local ou distant, existe encore.

 
Cette fonction ne précise pas si le looper est réellement prêt à recevoir des messages, ou si le handler existe (s'il a été spécifié dans le constructeur). Autrement dit, un BMessenger valide n'apporte aucune garantie qu'un message atteindra réellement le destinataire.



LockTarget() , LockTargetWithTimeout()

                                                         
  

bool LockTarget(void) const

status_t LockTargetWithTimeout(bigtime_t timeout) const

 
Ces fonctions sont uniquement applicables aux destinataires locaux.


Ces fonctions tentent de verrouiller le looper destinataire à la manière des fonctions BLooper de même nom (voir BLooper::LockTarget()). En plus des codes erreur déjà décrits, ces fonctions retournent respectivement false et B_BAD_VALUE si le destinataire n'est pas local, ou si le looper est de quelque manière invalide.


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

Envoie une copie de message (ou un BMessage basé sur une constante command) à la destinataire de l'objet. L'appelant reste propriétaire du message. La fonction n'effectue son retour que lorsque le message a été délivré; Si vous envoyez un message (et non une constante command) vous pouvez positionner un délai de livraison en microseconde via deliveryTimeout.

Le destinataire peut répondre au message :

 
Soyez prudents lorque vous demandez une réponse synchrone : Si vous appellez SendMessage() à partir du thread du looper destinataire, vous provoquez un deadlock (ou, au mieux, un time out).


CODES RETOUR

 
Si vous avez défini un handler en construisant votre BMessenger, et que ce handler a changé de looper depuis, SendMessage() ne délivrera pas son message, mais ne se plaindra pas (il retournera B_OK).



Target() , IsTargetLocal() , Team()

                                                         
  

BHandler *Target(BLooper **looper) const

bool IsTargetLocal(void) const

inline team_id Team(void) const

Target() retourne le handler de BMessenger (directement) and le looper (par référence dans looper). Cette fonction est applicable uniquement aux destinataires locaux. Si Target() retourne NULL, cela signifie un des quatre évènements suivants :

IsTargetLocal() retourne true si le destinataire est local. Team() retourne un team de destinataire.


Team() voir Target()


Operateurs


= (assignation)

                                                         
  

BMessenger &operator =(const BMessenger&)

Assigne le destinataire BMessenger (à gauche) à l'objet (à droite).


== (égalité)

                                                         
  

bool operator ==(const BMessenger&) const

Deux BMessengers sont égaux s'ils ont le même destinataire.


Sommaire du Kit d'Application     Index du Kit d'Application


The Be Book,
...in lovely HTML...
for BeOS Release 5.

Copyright © 2000 Be, Inc. All rights reserved..