FREETHRD-Beispiel: Multithreaded Client und Freethreadserver mit COM-Unterstützung des Compilers
Dieses Beispiel demonstriert einen Multithreadclient und einen Freethreadserver mit COM-Unterstützung des Compilers.
Dieses Beispiel besteht aus den folgenden Teilen:
Freclien, ein Multithreadclient
Freserve, ein prozessinterner Freethreadserver
Sicherheitshinweis |
---|
Dieser Beispielcode soll lediglich ein Konzept veranschaulichen. Es wird nur der für das jeweilige Konzept relevante Code dargestellt. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "wie besehen" und ohne Garantien zur Verfügung. |
So rufen Sie Beispiele und Anweisungen für ihre Installation ab
So greifen Sie auf Beispiele aus Visual Studio zu
Klicken Sie im Menü Hilfe auf Beispiele.
Standardmäßig werden diese Beispiele unter Laufwerkbuchstabe:\Programme\Microsoft Visual Studio 10.0\Samples\ installiert.
- Eine aktuelle Version dieses Beispiels und eine Liste anderer Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.
Erstellen und Ausführen des Beispiels
So erstellen Sie dieses Beispiel und führen es aus
Öffnen Sie die Projektmappe freethrd.sln.
Erstellen Sie erst das Serverprojekt und dann das Clientprojekt.
Richten Sie das Clientprojekt als Startprojekt ein (klicken Sie dazu mit der rechten Maustaste auf den Projektknoten, und klicken Sie auf Als Startprojekt festlegen). Führen Sie dann das Beispiel aus.
So funktioniert das Beispiel
Das Freclien-Beispiel erzeugt mehrere Threads, um das COM-Objekt COBall des Freethreadservers Freserve zu erstellen und zu verwenden. Das COBall-Objekt selbst erzeugt keine Threads. Stattdessen reagiert es passiv auf IBall-Schnittstellenanforderungen von mehreren möglichen Clientthreads. Der Freclien-Client erstellt und steuert ein COBall-Objekt durch die vom Objekt verfügbar gemachte IBall-Schnittstelle. Während drei der Threads von Freclien die Kugel durch Aufrufe an IBall::Move bewegen, verwendet der verbleibende Hauptthread einen Systemzeitgeber, um zeitlich abgestimmte Aktualisierungen über die Position, Größe und Farbe des COBall-Objekts zu erhalten. Dieser Hauptthread verwendet die durch Aufrufen der IBall::GetBall-Methode erhaltenen Daten, um grafische Momentaufnahmebilder im Hauptfenster des Clients anzuzeigen.
Im Freserve-Beispiel aktualisiert das COBall-Objekt intern seine Farbeigenschaft gemäß dem letzten Thread, der die Move-Methode des Objekts aufgerufen hat. Der Anzeigethread verwendet diese Daten für jedes angezeigte Bild der Kugel. Während sich die Kugel bewegt, ändert sich ihre Farbe gemäß dem jeweiligen Thread, der die Kugel bewegt. Gleichzeitig hinterlässt die Kugel eine Spur, die den Verlauf der verwendeten Threads eindrucksvoll visuell darstellt. Diese Spur demonstriert, dass beim Freethreadmodell von COM jeder Thread, der Schnittstellenanforderungen an dasselbe Objekt durchführt, auf dem aufrufenden Thread auf das Objekt zugreift. Die unterschiedlichen Farben des jeweiligen Kugelobjekts stellen die unterschiedlichen aufrufenden Threads dar.
Dieses Beispiel verwendet die systemeigene COM-Unterstützung des Compilers. Es zeigt eine benutzerdefinierte COM-Schnittstelle, die die RECT-Struktur und die POINT-Struktur mit dem Freethreadmodell marshallt. Darüber hinaus demonstriert es die Verwendung des exclude-Attributs und der #import-Direktive.