Beispiel für AutoThread-Attribute: Demonstriert die Verwendung von "CAtlAutoThreadModule"
Aktualisiert: November 2007
Das AutoThread-Beispiel demonstriert die Verwendung von CAtlAutoThreadModule. Der Server ist in der Datei Server.exe implementiert. Das Modul der EXE-Datei ist nicht von CComModule, sondern von CAtlAutoThreadModule abgeleitet.
Das AutoThread-Beispiel ist die attributierte Version dieses Beispiels.
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.
So erstellen Sie dieses Beispiel und führen es aus
Öffnen Sie die Projektmappendatei AutoThread.sln.
Klicken Sie im Menü Erstellen auf Projektmappe erstellen. Dadurch werden der Client und der Server erstellt und registriert.
Starten Sie zwei Instanzen des Testcontainers für ActiveX-Steuerelemente. Informationen zum Zugreifen auf den Testcontainer finden Sie unter Testen von Eigenschaften und Ereignissen mit dem Testcontainer.
Fügen Sie in jeden Testcontainer ein Clientsteuerelement (CAutoCtl-Klasse) ein.
Wenn Sie nun auf eines der Steuerelemente klicken, dauert es in etwa eine Sekunde, bis der Server wieder aktiviert wird.
Ändern Sie die Position und die Größe der Testcontainer so, dass beide gleichzeitig angezeigt werden.
Klicken Sie auf eines der Steuerelemente und dann schnell auf das andere. Die Beendigung der Inaktivität erfolgt für beide ungefähr zur gleichen Zeit. (Ohne die Verwendung von CComAutoThreadModule würde das erste Steuerelement nach einer Sekunde inaktiv werden, das zweite würde jedoch erst eine Sekunde nach Beendigung des ersten inaktiv werden. Der zweite Aufruf für den Ruhezustand würde erst nach Beendigung des ersten gestartet werden.) Mithilfe der Delay(PropGet)-Methode und der Delay(PropPut)-Methode können Sie die Dauer der Inaktivität des Servers anpassen (in Millisekunden). Wenn dieser richtig eingestellt ist, kann der zweite Aufruf für den Ruhezustand vor dem ersten zurückgegeben werden.
So funktioniert das Beispiel
Die Serverschnittstelle verfügt über eine einzige Methode: Sleep. Diese Methode versetzt den Serverthread für einen bestimmten Zeitraum in den Ruhezustand. Der Clientbereich des Beispiels ist ein ActiveX-Steuerelement, das die Sleep-Methode des Servers aufruft, wenn die Benutzer darauf klicken. Dieser Client hat die Eigenschaft Delay, die bestimmt, wie lange der Serverthread im Ruhezustand verweilen wird. Wenn auf das Steuerelement geklickt werden kann, wird "Bereit" angezeigt. Solange das Steuerelement auf das Ende des Ruhezustands des Servers wartet, wird "Warten" angezeigt.
Attribute
In diesem Beispiel werden die folgenden Attribute verwendet:
AutoThread/AutoClient: coclass, dual, emitidl, helpstring, id, in, module, object, out, pointer_default, progid, propget, propput, registration_script, retval, threading, uuid, version, vi_progid
AutoThread/AutoServer: coclass, dual, emitidl, helpstring, id, module, object, pointer_default, progid, threading, uuid, version, vi_progid
Schlüsselwörter
In diesem Beispiel werden die folgenden Schlüsselwörter verwendet:
AtlGetObjectSourceInterface; BEGIN_SINK_MAP; CoCreateInstance; DECLARE_CLASSFACTORY_SINGLETON; IDispEventSimpleImpl::DispEventAdvise; END_SINK_MAP; IConnectionPointContainerImpl; IConnectionPointImpl; IDispEventImpl; OLE2CT; SINK_ENTRY_EX; SysAllocString; USES_CONVERSION; VARIANT; VariantClear; VariantCopy
Hinweis: |
---|
In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können. |