Multithreading : création de threads d’interface utilisateur MFC

Un thread d’interface utilisateur est couramment utilisé pour gérer les entrées utilisateur et répondre aux événements utilisateur indépendamment des threads exécutant d’autres parties de l’application. Le thread d’application principal (fourni dans votre CWinAppclasse dérivée) est déjà créé et démarré pour vous. Cette rubrique décrit les étapes nécessaires pour créer des threads d’interface utilisateur supplémentaires.

La première chose que vous devez faire lors de la création d’un thread d’interface utilisateur est de dériver une classe de CWinThread. Vous devez déclarer et implémenter cette classe à l’aide des macros DECLARE_DYNCREATE et IMPLEMENT_DYNCREATE . Cette classe doit remplacer certaines fonctions et peut remplacer d’autres. Ces fonctions et ce qu’elles doivent faire sont présentées dans le tableau suivant.

Fonctions à remplacer lors de la création d’un thread d’interface utilisateur

Fonction Objectif
ExitInstance Effectuez propre up lorsque le thread se termine. Généralement remplacé.
InitInstance Effectuer l’initialisation d’une instance de thread. Doit être substitué.
OnIdle Effectuez un traitement en temps d’inactivité spécifique au thread. Pas généralement remplacé.
PreTranslateMessage Filtrez les messages avant qu’ils ne soient envoyés vers TranslateMessage et DispatchMessage. Pas généralement remplacé.
ProcessWndProcException Interceptez les exceptions non gérées levées par le message et les gestionnaires de commandes du thread. Pas généralement remplacé.
Exécuter Fonction de contrôle du thread. Contient la pompe de messages. Rarement remplacé.

MFC fournit deux versions de la surcharge des AfxBeginThread paramètres : une qui ne peut créer que des threads de travail et une qui peut créer des threads d’interface utilisateur ou des threads de travail. Pour démarrer votre thread d’interface utilisateur, appelez la deuxième surcharge d’AfxBeginThread, en fournissant les informations suivantes :

  • La RUNTIME_CLASS de la classe à partir de laquelle CWinThreadvous avez dérivé .

  • (Facultatif) Niveau de priorité souhaité. La priorité par défaut est normale. Pour plus d’informations sur les niveaux de priorité disponibles, consultez SetThreadPriority dans le Kit de développement logiciel (SDK) Windows.

  • (Facultatif) Taille de pile souhaitée pour le thread. La valeur par défaut est la même pile de tailles que le thread de création.

  • (Facultatif) CREATE_SUSPENDED si vous souhaitez que le thread soit créé dans un état suspendu. La valeur par défaut est 0 ou démarre le thread normalement.

  • (Facultatif) Attributs de sécurité souhaités. La valeur par défaut est le même accès que le thread parent. Pour plus d’informations sur le format de ces informations de sécurité, consultez SECURITY_ATTRIBUTES dans le Kit de développement logiciel (SDK) Windows.

AfxBeginThread fait la plupart du travail pour vous. Il crée un objet de votre classe, l’initialise avec les informations que vous fournissez et appelle CWinThread ::CreateThread pour commencer à exécuter le thread. Les vérifications sont effectuées tout au long de la procédure pour s’assurer que tous les objets sont désalloués correctement si une partie de la création échoue.

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?

Voir aussi

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