FREETHRD-Beispiel: Multithreaded Client und Freethreadserver mit COM-Unterstützung des Compilers
Aktualisiert: November 2007
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 dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird. |
So rufen Sie Beispiele und Anweisungen für ihre Installation ab
Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.
Weitere Informationen finden Sie unter Suchen von Beispieldateien.
Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.
Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.
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 Snapshotbilder 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.