Subprocesamiento múltiple con C++ y MFCMultithreading with C++ and MFC

La biblioteca MFC (Microsoft Foundation Class) proporciona compatibilidad con aplicaciones multiproceso.The Microsoft Foundation Class (MFC) library provides support for multithreaded applications. En este tema se describen los procesos y subprocesos y el enfoque de MFC para multithreading.This topic describes processes and threads and the MFC approach to multithreading.

Un proceso es una instancia en ejecución de una aplicación.A process is an executing instance of an application. Por ejemplo, al hacer doble clic en el icono del Bloc de notas, inicia un proceso que ejecuta el Bloc de notas.For example, when you double-click the Notepad icon, you start a process that runs Notepad.

Un subproceso es una ruta de ejecución dentro de un proceso.A thread is a path of execution within a process. Al iniciar el Bloc de notas, el sistema operativo crea un proceso y comienza a ejecutar el subproceso principal de ese proceso.When you start Notepad, the operating system creates a process and begins executing the primary thread of that process. Cuando este subproceso finaliza, se realiza el proceso.When this thread terminates, so does the process. El código de inicio proporciona este subproceso principal al sistema operativo en forma de dirección de función.This primary thread is supplied to the operating system by the startup code in the form of a function address. Normalmente, es la dirección de la main función o WinMain que se proporciona.Usually, it is the address of the main or WinMain function that is supplied.

Si lo desea, puede crear subprocesos adicionales en la aplicación.You can create additional threads in your application if you want. Puede que desee hacer esto para controlar las tareas de fondo o mantenimiento cuando no desea que el usuario espere a que se completen.You might want to do this to handle background or maintenance tasks when you do not want the user to wait for them to complete. Todos los subprocesos de las aplicaciones MFC se representan mediante objetos CWinThread .All threads in MFC applications are represented by CWinThread objects. En la mayoría de los casos, ni siquiera es necesario crear explícitamente estos objetos; en su lugar, llame a la función auxiliar de Framework AfxBeginThread, CWinThread que crea el objeto automáticamente.In most situations, you do not even have to explicitly create these objects; instead call the framework helper function AfxBeginThread, which creates the CWinThread object for you.

MFC distingue dos tipos de subprocesos: subprocesos de la interfaz de usuario y subprocesos de trabajo.MFC distinguishes two types of threads: user-interface threads and worker threads. Los subprocesos de la interfaz de usuario se utilizan normalmente para controlar los datos proporcionados por el usuario y responder a eventos y mensajes generados por el usuario.User-interface threads are commonly used to handle user input and respond to events and messages generated by the user. Los subprocesos de trabajo se utilizan normalmente para completar tareas, como el recálculo, que no requieren la intervención del usuario.Worker threads are commonly used to complete tasks, such as recalculation, that do not require user input. La API de Win32 no distingue entre tipos de subprocesos; solo debe conocer la dirección de inicio del subproceso para que pueda empezar a ejecutar el subproceso.The Win32 API does not distinguish between types of threads; it just needs to know the thread's starting address so it can begin to execute the thread. MFC controla los subprocesos de la interfaz de usuario de forma especial proporcionando un bombeo de mensajes para los eventos en la interfaz de usuario.MFC handles user-interface threads specially by supplying a message pump for events in the user interface. CWinAppes un ejemplo de un objeto de subproceso de interfaz de usuario, porque deriva CWinThread de y controla eventos y mensajes generados por el usuario.CWinApp is an example of a user-interface thread object, because it derives from CWinThread and handles events and messages generated by the user.

Se debe prestar especial atención a situaciones en las que más de un subproceso pueda requerir acceso al mismo objeto.Special attention should be given to situations where more than one thread might require access to the same object. Multithreading: Sugerencias de programación describe las técnicas que puede usar para solucionar los problemas que puedan surgir en estas situaciones.Multithreading: Programming Tips describes techniques that you can use to get around problems that might arise in these situations. Multithreading: Cómo usar las clases de sincronización describe cómo utilizar las clases que están disponibles para sincronizar el acceso desde varios subprocesos a un único objeto.Multithreading: How to Use the Synchronization Classes describes how to use the classes that are available to synchronize access from multiple threads to a single object.

Escribir y depurar la programación multiproceso es intrínsecamente una tarea complicada y difícil, ya que debe asegurarse de que más de un subproceso tenga acceso a los objetos a la vez.Writing and debugging multithreaded programming is inherently a complicated and tricky undertaking, because you must ensure that objects are not accessed by more than one thread at a time. Los temas de multithreading no enseñan los aspectos básicos de la programación multiproceso, solo cómo usar MFC en el programa multiproceso.The multithreading topics do not teach the basics of multithreaded programming, only how to use MFC in your multithreaded program. Los ejemplos de MFC multiproceso incluidos en Visual C++ ilustran una serie de funciones de adición multiproceso y API de Win32 no incluidas en MFC; sin embargo, solo están pensados para ser un punto de partida.The multithreaded MFC samples included in Visual C++ illustrate a few multithreaded Adding Functionality and Win32 APIs not encompassed by MFC; however, they are only intended to be a starting point.

Para obtener más información sobre cómo el sistema operativo controla los procesos y los subprocesos, vea procesos y subprocesos en el Windows SDK.For more information about how the operating system handles processes and threads, see Processes and Threads in the Windows SDK.

Para obtener más información acerca de la compatibilidad con multithreading de MFC, vea los temas siguientes:For more information about MFC multithreading support, see the following topics:

Vea tambiénSee also

Compatibilidad del código antiguo con multithreading (Visual C++)Multithreading Support for Older Code (Visual C++)