Partager via


FREETHRD, exemple : client multithread et serveur libre de threads avec support COM du compilateur

Cet exemple illustre un client multithread et un serveur libre de threads avec le support COM du compilateur.

Cet exemple est constitué des parties suivantes :

  • Freclien, un client multithread ;

  • Freserve, un serveur in-process libre de threads.

Note de sécuritéNote de sécurité

Cet exemple de code est destiné à illustrer un concept ; il présente uniquement le code qui se rapporte spécifiquement à ce concept. Il est possible qu'il ne réponde pas aux exigences de sécurité d'un environnement spécifique, et ne doit pas être utilisé exactement comme indiqué. Nous vous recommandons d'ajouter du code de sécurité et de gestion des erreurs afin de renforcer la sécurité et la fiabilité de vos projets. Microsoft fournit cet exemple de code « EN L'ÉTAT » sans aucune garantie.

Pour obtenir des exemples et des instructions d'installation :

Pour accéder aux exemples de Visual Studio

  • Dans le menu Aide, cliquez sur Exemples.

    Par défaut, ces exemples sont installés sous lecteur:\Program Files\Microsoft Visual Studio 10.0\Samples\.

Génération et exécution de l'exemple

Pour générer et exécuter cet exemple

  1. Ouvrez la solution freethrd.sln.

  2. Générez le projet serveur, puis le projet client.

  3. Définissez le projet client comme projet de démarrage (cliquez avec le bouton droit sur le nœud du projet et cliquez sur Définir comme projet de démarrage), puis exécutez l'exemple.

Fonctionnement de l'exemple

L'exemple Freclien génère dynamiquement plusieurs threads pour créer et utiliser l'objet COM COBall fourni par le serveur libre de threads Freserve. L'objet COBall lui-même ne génère aucun thread ; il se contente de répondre passivement aux demandes concernant l'interface IBall émises par plusieurs threads clients. Le client Freclien crée et contrôle un seul objet COBall via l'interface IBall exposée par l'objet. Comme trois des threads de Freclien déplacent la balle via des appels à IBall::Move, le thread principal restant utilise une horloge système pour obtenir des mises à jour planifiées de la position, de la taille et de la couleur de l'objet COBall. Ce thread principal utilise les données obtenues par l'appel à la méthode IBall::GetBall pour afficher des représentations graphiques instantanées de la balle dans la fenêtre principale du client.

Dans l'exemple Freserve, l'objet COBall met à jour sa propriété de couleur de manière interne pour refléter le dernier thread ayant appelé la méthode Move de l'objet. Le thread d'affichage utilise ces données pour chaque image de la balle affichée. À mesure que la balle se déplace, elle change de couleur pour refléter les différents threads qui déplacent la balle. À mesure que la balle se déplace, elle laisse également une trace qui fournit un historique visuel très expressif des différents threads. Cette trace montre que, avec le modèle COM libre de threads, tous les threads qui effectuent des demandes d'interface auprès du même objet accèdent à cet objet sur le thread appelant. Chaque couleur de l'objet représente un thread appelant différent.

Cet exemple utilise le support COM du compilateur natif. Il fournit un exemple d'interface COM personnalisée qui marshale les structures RECT et POINT avec le modèle libre de threads. Il illustre également l'utilisation de l'attribut exclude de la directive #import.

Voir aussi

Référence

Compiler COM Support

Autres ressources

Compiler COM Support Samples

Exemples généraux