Compartir por


Subprocesamiento múltiple con C++ y MFC

La biblioteca Microsoft Foundation Class (MFC) proporciona compatibilidad con aplicaciones de multithreading. En este tema se describen los procesos y subprocesos y el enfoque de MFC para multithreading.

Un proceso es una instancia en ejecución de una aplicación. Por ejemplo, al hacer doble clic en el icono del Bloc de notas, se inicia un proceso que ejecuta el Bloc de notas.

Un subproceso es la ruta de ejecución dentro de un proceso. Al iniciar el Bloc de notas, el sistema operativo crea un proceso y comienza a ejecutar el subproceso principal de ese proceso. Cuando este subproceso finaliza, también lo hace el proceso. El código de inicio proporciona este subproceso principal al sistema operativo en forma de dirección de función. Normalmente, es la dirección de la función main o WinMain lo que se proporciona.

Puede crear subprocesos adicionales en su aplicación si lo desea. Es posible que quiera llevar esto a cabo para controlar las tareas en segundo plano o de mantenimiento cuando no desea que el usuario espere a que se completen. Todos los subprocesos de las aplicaciones MFC se representan mediante objetos de CWinThread. En la mayoría de los casos, ni siquiera es necesario crear explícitamente estos objetos; en su lugar, llame a la función del asistente del marco AfxBeginThread, que crea el objeto CWinThread automáticamente.

MFC distingue dos tipos de subprocesos: subprocesos de interfaz de usuario y subprocesos de trabajo. Los subprocesos de la interfaz de usuario se usan normalmente para controlar la entrada del usuario y responder a eventos y mensajes generados por el usuario. Los subprocesos de trabajo se suelen usar para completar tareas, como el recálculo, que no requieren una entrada de usuario. La API Win32 no distingue entre tipos de subprocesos; solo necesita conocer la dirección inicial del subproceso para que pueda empezar a ejecutar el subproceso. MFC controla subprocesos de interfaz de usuario especialmente al proporcionar una bomba de mensajes para eventos en la interfaz de usuario. CWinApp es un ejemplo de un objeto de subproceso de interfaz de usuario, ya que deriva de CWinThread y controla eventos y mensajes generados por el usuario.

Se debe prestar especial atención a situaciones en las que más de un subproceso podría requerir acceso al mismo objeto. Multithreading: sugerencias de programación describe técnicas que puede usar para solucionar problemas que podrían surgir en estas situaciones. Multithreading: Uso de las clases de sincronización describe cómo usar las clases que están disponibles para sincronizar el acceso de varios subprocesos a un solo objeto.

La escritura y depuración de la programación de multithreading es intrínsecamente una tarea complicada y difícil, ya que debe asegurarse de que no más de un subproceso a la vez accede a los objetos. Los temas de multithreading no enseñan los conceptos básicos de la programación de multithreading, solo cómo usar MFC en el programa de multithreading. Las muestras de MFC de multithreading incluidas en Visual C++ ilustran algunas API Win32 y de Adición de funcionalidad de multhreading no incluidas en MFC; sin embargo, su objetivo solo es ser un punto inicial.

Para obtener más información sobre cómo el sistema operativo controla los procesos y subprocesos, consulte Procesos y subprocesos en Windows SDK.

Para obtener más información sobre la compatibilidad con multithreading de MFD, consulte los temas siguientes:

Consulte también

Compatibilidad del código antiguo con multithreading (Visual C++)