CoAddRefServerProcess, fonction (combaseapi.h)
Incrémente un nombre global de références par processus.
Syntaxe
ULONG CoAddRefServerProcess();
Valeur de retour
Nombre de références actuel.
Remarques
Les serveurs peuvent appeler CoAddRefServerProcess pour incrémenter un nombre global de références par processus. Cette fonction est particulièrement utile pour les serveurs implémentés avec plusieurs threads, multi-appartements ou avec threads libres. Les serveurs de ces types doivent coordonner la décision d’arrêter avec les demandes d’activation sur plusieurs threads. L’appel de CoAddRefServerProcess incrémente un nombre global de références par processus, et l’appel de CoReleaseServerProcess décrémente ce nombre.
Lorsque ce nombre atteint zéro, OLE appelle automatiquement CoSuspendClassObjects, ce qui empêche l’entrée de nouvelles demandes d’activation. Cela permet au serveur d’annuler l’inscription de ses objets de classe à partir de ses différents threads sans craindre qu’une autre demande d’activation puisse entrer. Les nouvelles demandes d’activation entraînent le lancement d’une nouvelle instance du processus du serveur local.
Le moyen le plus simple pour une application serveur local d’utiliser ces fonctions consiste à appeler CoAddRefServerProcess dans le constructeur pour chacun de ses objets instance, et dans chacune de ses méthodes IClassFactory ::LockServer lorsque le paramètre fLock a la valeur TRUE. L’application serveur doit également appeler CoReleaseServerProcess dans la destruction de chacun de ses objets instance et dans chacune de ses méthodes LockServer lorsque le paramètre fLock a la valeur FALSE. Enfin, l’application serveur doit prêter attention au code de retour de CoReleaseServerProcess et si elle retourne 0, l’application serveur doit lancer son nettoyage, ce qui, pour un serveur avec plusieurs threads, signifie généralement qu’elle doit signaler à ses différents threads de quitter leurs boucles de message et appeler CoRevokeClassObject et CoUninitialize.
Si ces fonctions sont utilisées, elles doivent être appelées à la fois dans les instances d’objet et dans la méthode LockServer , sinon l’application serveur peut être arrêtée prématurément. Les serveurs in-process ne doivent généralement pas appeler CoAddRefServerProcess ou CoReleaseServerProcess.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | combaseapi.h (inclure Objbase.h) |
Bibliothèque | Ole32.lib |
DLL | Ole32.dll |