Ejemplo de atributos AutoThread: muestra la utilización de CAtlAutoThreadModule

Actualización: noviembre 2007

El ejemplo AutoThread muestra cómo utilizar CAtlAutoThreadModule. El servidor se implementa en el archivo Server.exe. El módulo del archivo EXE se deriva de CAtlAutoThreadModule, no de CAtlModule.

El ejemplo AutoThread constituye la verGsión sin atributos de este ejemplo.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Para generar y ejecutar este ejemplo

  1. Abra el archivo de solución AutoThread.sln.

  2. En el menú Generar, haga clic en Generar solución. De esta forma, se genera y se registra tanto el cliente como el servidor.

  3. Inicie dos instancias de ActiveX Control Test Container. Vea Probar propiedades y eventos con Test Container para obtener información sobre cómo tener acceso a Test Container.

  4. Inserte uno de los controles del cliente (clase CAutoCtl) en cada uno de los contenedores de prueba.

  5. Haga clic en uno de los controles y observe que el servidor tarda un segundo en volver.

  6. Coloque los contenedores de prueba y modifique su tamaño de modo que pueda ver ambos a la vez.

  7. Haga clic en uno de los controles y, a continuación, haga clic rápidamente en el otro control. Observe que ambos terminan de esperar casi al mismo tiempo. Si no se utilizara CComAutoThreadModule, el primer control terminaría después de un segundo, pero el segundo control no terminaría hasta un segundo después de haber terminado el primero. La segunda llamada para pasar a inactividad (sleep) no se produciría hasta que la primera hubiese terminado. Puede utilizar los métodos Delay(PropGet) y Delay(PropPut) para ajustar el número de milisegundos de inactividad (sleep) del servidor. Si se configura correctamente, la segunda llamada a sleep puede terminar antes de la primera llamada a sleep.

Cómo funciona el ejemplo

La interfaz del servidor presenta un único método: Sleep. Este método permite poner el subproceso servidor en estado de inactividad durante cierto tiempo. La parte cliente del ejemplo es un control ActiveX que llama al método sleep del servidor cuando el usuario hace clic en el control. El cliente también dispone de una propiedad denominada Delay que expresa el tiempo de inactividad del subproceso servidor tras la llamada al método sleep. El control muestra el texto "Ready" cuando está esperando un clic del usuario. Si el control está esperando a que el servidor salga del estado de inactividad (sleep), se muestra el texto "Waiting".

Atributos

En este ejemplo se utilizan los atributos siguientes:

  • 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

Palabras clave

En este ejemplo se utilizan las siguientes palabras clave:

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

Nota:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de atributos ATL