Les méthodes de communication entre les threads comprennent : 1. Les variables globales, le partage de mémoire entre les threads du processus, qui est une méthode de communication et une méthode d'interaction courantes ; 2. Mécanisme de message 3. Objet CEvent, CEvent est un ; L'objet dans MFC peut établir une communication entre les threads en modifiant l'état de déclenchement de CEvent.
Il existe trois méthodes principales de communication multithread :
1. >
Partage de mémoire entre les threads dans le processus, il s'agit d'une méthode de communication et d'interaction courante. Remarque : Il est préférable d'utiliser volatile lors de la définition de variables globales pour empêcher le compilateur d'optimiser cette variable.2. Mécanisme de messagerie
Il existe deux interfaces principales pour la communication de messages couramment utilisées : PostMessage et PostThreadMessage PostMessage est un fil de discussion qui envoie des messages. à la fenêtre principale. Envoyer un message. PostThreadMessage est l'interface de communication entre deux threads quelconques.2.1.PostMessage()
Prototype de fonction : B00L PostMessage (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); >Paramètres :
hWnd : Le handle de la fenêtre dont le programme de fenêtre reçoit des messages. Il peut prendre deux valeurs avec des significations spécifiques :
HWND.BROADCAST : Le message est envoyé à toutes les fenêtres de niveau supérieur du système, y compris les fenêtres non propriétaires invalides ou invisibles et les fenêtres couvertes
et pop-ups. Les messages ne sont pas envoyés aux fenêtres enfants.
NULL : Le fonctionnement de cette fonction revient à appeler la fonction PostThreadMessage avec le paramètre dwThread défini sur l'identifiant du thread actuel.
Msg : Précisez le message à envoyer.
wParam : spécifiez des informations supplémentaires spécifiques au message.
IParam : spécifiez des informations supplémentaires spécifiques au message.
Valeur de retour : Si l'appel de fonction réussit, la valeur de retour est différente de zéro : Si l'appel de fonction échoue, la valeur de retour est zéro.
MS fournit également la méthode SendMessage pour la communication entre les messages, SendMessage(). La différence entre elle et PostMessage est :
SendMessage est synchrone, tandis que PostMessage est asynchrone. SendMessage doit attendre que le message envoyé soit exécuté avant de revenir.
2.2.PostThreadMessage()La méthode PostThreadMessage peut envoyer des messages au fil de discussion spécifié.
Prototype de fonction : BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);
Les paramètres sont fondamentalement les mêmes que PostMessage à l'exception de ThreadId.
Le thread cible reçoit des messages via la méthode GetMessage().
Remarque : lors de l'utilisation de cette méthode, le fil de discussion cible doit déjà avoir sa propre file d'attente de messages. Sinon, l'erreur ERROR_INVALID_THREAD_ID sera renvoyée. Vous pouvez utiliser
PeekMessage() pour créer une file d'attente de messages pour un fil de discussion.
3. Objet CEventCEvent est un objet dans MFC, qui peut réaliser la communication et la synchronisation entre les threads en modifiant l'état de déclenchement de CEvent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!