Partager via


Multithreading à l'aide de C++ et de MFC

La bibliothèque MFC (Microsoft Foundation Class) prend en charge les applications multithread. Cette rubrique décrit les processus et les threads et l’approche MFC pour le multithreading.

Un processus est une instance en cours d’exécution d’une application. Par exemple, lorsque vous double-cliquez sur l’icône bloc-notes, vous démarrez un processus qui exécute le Bloc-notes.

Un thread est un chemin d’exécution au sein d’un processus. Lorsque vous démarrez le Bloc-notes, le système d’exploitation crée un processus et commence à exécuter le thread principal de ce processus. Lorsque ce thread se termine, le processus est donc terminé. Ce thread principal est fourni au système d’exploitation par le code de démarrage sous la forme d’une adresse de fonction. En règle générale, il s’agit de l’adresse de la ou WinMain de la main fonction fournie.

Vous pouvez créer des threads supplémentaires dans votre application si vous le souhaitez. Vous pouvez le faire pour gérer les tâches d’arrière-plan ou de maintenance lorsque vous ne souhaitez pas que l’utilisateur attende qu’il se termine. Tous les threads dans les applications MFC sont représentés par des objets CWinThread . Dans la plupart des cas, vous n’avez même pas besoin de créer explicitement ces objets ; Appelez plutôt la fonction d’assistance de framework AfxBeginThread, qui crée l’objet CWinThread pour vous.

MFC distingue deux types de threads : les threads d’interface utilisateur et les threads de travail. Les threads d’interface utilisateur sont couramment utilisés pour gérer les entrées utilisateur et répondre aux événements et messages générés par l’utilisateur. Les threads de travail sont couramment utilisés pour effectuer des tâches, telles que le recalcul, qui ne nécessitent pas d’entrée utilisateur. L’API Win32 ne fait pas la distinction entre les types de threads ; il doit simplement connaître l’adresse de départ du thread afin qu’elle puisse commencer à exécuter le thread. MFC gère les threads d’interface utilisateur spécialement en fournissant une pompe de messages pour les événements dans l’interface utilisateur. CWinApp est un exemple d’objet thread d’interface utilisateur, car il dérive CWinThread et gère les événements et les messages générés par l’utilisateur.

Une attention particulière doit être accordée aux situations où plusieurs threads peuvent nécessiter l’accès au même objet. Multithreading : les conseils de programmation décrivent les techniques que vous pouvez utiliser pour contourner les problèmes qui peuvent survenir dans ces situations. Multithreading : Comment utiliser les classes de synchronisation décrit comment utiliser les classes disponibles pour synchroniser l’accès à partir de plusieurs threads vers un seul objet.

L’écriture et le débogage de programmation multithread sont intrinsèquement une tâche complexe et délicate, car vous devez vous assurer que les objets ne sont pas accessibles par plusieurs threads à la fois. Les rubriques multithreading n’enseignent pas les principes de base de la programmation multithread, mais seulement comment utiliser MFC dans votre programme multithread. Les exemples MFC multithreads inclus dans Visual C++ illustrent quelques API d’ajout multithread et Win32 non incluses par MFC ; toutefois, elles ne sont destinées qu’à être un point de départ.

Pour plus d’informations sur la façon dont le système d’exploitation gère les processus et les threads, consultez Processus et threads dans le Kit de développement logiciel (SDK) Windows.

Pour plus d’informations sur la prise en charge de multithreading MFC, consultez les rubriques suivantes :

Voir aussi

Prise en charge du multithreading pour le code plus ancien (Visual C++)