DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des traitements / Threads, sémaphores, signaux et mutex
  • Présentation
  • Ouverture d'une fenêtre depuis un thread secondaire via un dialogue par messages
  • Principe
  • Exemple
  • La méthode décrite ci-dessus est utilisée dans l'exemple WD Messagerie instantanée.
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Un thread secondaire ne peut pas ouvrir directement une fenêtre avec les fonctions classiques du WLangage telles que : Ouvre, Utilise, ...
Or il peut être utile d'afficher une fenêtre à partir d'un thread secondaire. Par exemple, si un thread est utilisé pour gérer la réception des appels téléphonique, lorsqu'un appel entrant est détecté ce thread peut afficher une fenêtre avec les caractéristiques de l'appelant.
La solution consiste à faire ouvrir la fenêtre à partir d'un code exécuté par le thread principal.
Pour lancer depuis un thread secondaire l'exécution d'un code par le thread principal, les méthodes suivantes sont disponibles :
  • Exécuter une procédure globale du projet ou une procédure locale d'une fenêtre via la fonction ExécuteThreadPrincipal,
  • Exécuter l'événement "Demande de mise à jour de l'affichage" d'une fenêtre via la fonction DemandeMiseAJourIHM,
  • Instaurer un dialogue par messages entre les threads (fonctions PostMessage et Evénement).
Ouverture d'une fenêtre depuis un thread secondaire via un dialogue par messages

Principe

Pour ouvrir une fenêtre à partir d'un thread secondaire :
  1. Lorsque le thread secondaire veut ouvrir une fenêtre, il envoie un message au thread principal grâce à la fonction PostMessage. Ce message indique au thread principal la fenêtre à ouvrir et les paramètres nécessaires à l'ouverture de la fenêtre.
  2. Le thread principal gère un événement spécifique, correspondant à la demande d'ouverture de fenêtre. Lorsque cet événement survient, la procédure WLangage lancée ouvre la fenêtre spécifiée (avec la fonction Ouvre par exemple) avec si nécessaire les paramètres indiqués.
Exemple

La méthode décrite ci-dessus est utilisée dans l'exemple WD Messagerie instantanée.

Le code d'ouverture de la fenêtre principale permet de :
  • mettre en place un événement pour gérer l'ouverture de la fenêtre dans le thread principal.
  • déclencher les threads secondaires.
// Mise en place d'un événement
// pour gérer l'ouverture de la fenêtre de "chat"
gnIdEvenement = Evénement("OuvertureChat", "*.*", "DebutChat")
SI gnIdEvenement = 0 ALORS
// Erreur lors de la mise en place
// de l'événement de gestion de la fenêtre de "chat"
Erreur("Impossible de gérer la fenêtre d'ouverture de chat", ErreurInfo())
// L'application ne peut pas fonctionner sans cet événement
FinProgramme()
FIN
 
// Ecoute des requêtes de connexion et de tests de présence
ThreadExécute("ThreadPresence", threadNormal, "EcouteDemandePresence")
ThreadExécute("ThreadRequete", threadNormal, "EcouteDemandeConnexion")
L'ouverture de la fenêtre est réalisée par exemple dans le code de la procédure EcouteRequeteDebutMessage. Cette procédure est exécutée dans un thread. Le code utilisé pour ouvrir la fenêtre depuis le thread est le suivant :
// Demande d'ouverture de la fenêtre de "chat"
PostMessage(Handle(FEN_Principale),"DebutChat", FIC_CONTACT.IDCONTACT, FIC_CONTACT.IDCONTACT)
Le message "DébutChat" est envoyé à la fenêtre principale (identifiée par son Handle). Ce message contient les différents paramètres à passer à la fenêtre. Le message est traité par l'événement défini dans le code d'ouverture de la fenêtre. Lorsque le message survient, la procédure "OuvertureChat" est automatiquement exécutée. C'est cette procédure qui ouvre la fenêtre.
Le code de cette procédure est le suivant :
PROCÉDURE OuvertureChat(nParam,nContact)
OuvreSoeur(FEN_Message, nContact)
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 21/06/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale