Subprocesamiento múltiple: Crear subprocesos de la interfaz de usuario

Actualización: noviembre 2007

Los subprocesos de interfaz de usuario se utilizan normalmente para controlar los datos proporcionados por el usuario y para responder a los eventos de usuario independientemente de los subprocesos que ejecutan otras partes de la aplicación. El subproceso principal de la aplicación (suministrado en la clase derivada de CWinApp) ya está creado y se inicia automáticamente. Este tema describe los pasos necesarios para crear subprocesos de interfaz de usuario adicionales.

Lo primero que se debe hacer al crear un subproceso de interfaz de usuario es derivar una clase de CWinThread. La clase se debe declarar e implementar mediante las macros DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE. Esta clase debe reemplazar algunas funciones y puede reemplazar otras. Estas funciones, y su cometido, se presentan en la siguiente tabla.

Funciones que se deben reemplazar cuando se crea un subproceso de interfaz de usuario

Función

Finalidad

ExitInstance

Realizar tareas de limpieza cuando el subproceso termina. Normalmente, se reemplaza.

InitInstance

Llevar a cabo la inicialización de la instancia del subproceso. Debe reemplazarse.

OnIdle

Realizar el procesamiento de los tiempos de inactividad específicos del subproceso. No se suele reemplazar.

PreTranslateMessage

Filtrar los mensajes antes de que se envíen a TranslateMessage y DispatchMessage. No se suele reemplazar.

ProcessWndProcException

Interceptar las excepciones no controladas producidas por el mensaje del subproceso y activar los controladores. No se suele reemplazar.

Run

Función controladora para el subproceso. Contiene la fuente de mensajes. Casi nunca se reemplaza.

MFC proporciona dos versiones de AfxBeginThread por medio de sobrecarga de parámetros: una para subprocesos de interfaz de usuario y otra para subprocesos de trabajo. Para iniciar el subproceso de interfaz de usuario, llame a AfxBeginThread con la siguiente información:

  • La RUNTIME_CLASS de la clase que se derivó de CWinThread.

  • (Opcional) El nivel de prioridad deseado. El valor predeterminado es la prioridad normal. Para obtener más información acerca de los niveles de prioridad disponibles, vea SetThreadPriority en Windows SDK.

  • (Opcional) El tamaño de pila deseado para el subproceso. El valor predeterminado para el tamaño de pila es el mismo que el del subproceso creador.

  • (Opcional) CREATE_SUSPENDED si se desea crear el subproceso en el estado suspendido. El valor predeterminado es 0, es decir, iniciar el subproceso normalmente.

  • (Opcional) Los atributos de seguridad deseados. El valor predeterminado es el mismo acceso que el de su subproceso primario. Para obtener más información acerca del formato de esta información de seguridad, vea SECURITY_ATTRIBUTES en Windows SDK.

AfxBeginThread realiza automáticamente la mayoría del trabajo. Crea un nuevo objeto de la clase, lo inicializa con la información suministrada y llama a CWinThread::CreateThread para empezar a ejecutar el subproceso. Se realizan comprobaciones en todo el procedimiento para asegurar que todos los objetos queden desasignados correctamente en caso de error en algún momento del proceso de creación.

¿Qué más desea saber?

Vea también

Conceptos

Subprocesamiento múltiple con C++ y MFC