MailSlots

La boite aux lettres (BAL / mailslots) s'appelle \\nom_ordinateur\mailslot\chemin\nom_bal

Elle peut donc s'utiliser pour des communications entre P.C. Elle utilise le mode de communication Datagramme qui ne garantit pas la livraison des message.

On peut envoyer des messages à l'ensemble des ordinateurs en utilisant le nom \\*\mailslot\chemin\nom_bal.

Je ne l'ai testée qu'en local entre deux Threads. On peut utiliser le nom \\.\mailslot\chemin\nom_bal

Un thread devient créateur de mailslot par la commande :

HMailslot = CreateMailslot("\\.\mailslot\chemin\nom_bal",SizeMaxCom,MAILSLOT_WAIT_FOREVER,NULL);

Le nom de la boîte doit être unique et elle ne peut être détruite manuellement, elle l'est automatiquement à la mort du process.

Le thread ecrivant dans la mailslot peut l'ouvrir

HComWrite =CreateFile("\\.\mailslot\chemin\nom_bal",
        GENERIC_WRITE,FILE_SHARE_READ,NULL,
        OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

Malheureusement j'ai observé que sous NT, on ne pouvait l'ouvrir qu'une fois simultanément.

Les lectures / écritures s'opère par les ReadFile et WriteFile standards. Voir aussi la fonction GetMailslotInfo

La lecture s'opère message par message même s'il y a plusieurs messages en attente.

Je n'ai pas noté de saturation sous NT de la mailslot, mais sous Windows 98, j'ai noté par exemple une saturation à 4000 messages, les nouveaux messages étant perdus sans avertissement.

Sous 98 et NT j'ai également noté des temps d'écriture et de lecture (300+200 us sur un P120 sous NT, 100+100 sur un P166 sous NT) deux fois plus long que les pipes anonymes .

Les mailslots sont à priori disponible sous 95/98/nt mais la fonction GetMailslotInfo qui permet de récupérer le nombre de message en attente a un problème sous 95.

 

 

 

Accueil ] Remonter ]