Partager via


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

Mise à jour : novembre 2007

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é :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu Aide de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page d'exemples Visual Studio 2008 (en anglais).

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Par défaut, des exemples et un fichier Readme sont copiés dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont accessibles en ligne.

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

Exemples de support COM du compilateur

Exemples généraux