|
|
|
|
|
- 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.
Ouverture d'une fenêtre à partir d'un thread secondaire
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 DemandeMiseAJourUI,
- Instaurer un dialogue par messages entre les threads (fonctions PostMessage et Evénement).
Liste des exemples associés :
|
Exemples didactiques (WINDEV) : WD ThreadUI
[ + ] L'utilisation de threads ou de tâches parallèles est très souvent obligatoire afin de répondre au besoin de rapidité des utilisateurs. Avec le WLangage de WINDEV, le lancement de traitements en tâche de fond est simplifié à l'extrême avec : - les fonctions de gestion des threads, - le type Thread, - les tâches parallèles. Mais attention, s'il est facile de lancer un traitement en arrière plan, il faut néanmoins être précautionneux sur l'UI de l'application : seuls les traitements exécutés dans le thread principal sont autorisés à mettre à jour l'interface (affecter un champ, remplir une liste, combo, table, zone répétée...). Cet exemple vous montre 4 façons de mettre à jour l'UI de vos applications avec des données provenant de threads secondaires.
|
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 : - 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.
- 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.
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.
gnIdEvenement = Evénement("OuvertureChat", "*.*", "DebutChat")
SI gnIdEvenement = 0 ALORS
Erreur("Impossible de gérer la fenêtre d'ouverture de chat", ErreurInfo())
FinProgramme()
FIN
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 :
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)
Liste des exemples associés :
|
Exemples complets (WINDEV) : WD Messagerie Instantanée
[ + ] Cet exemple illustre les fonctions "Socket" de WINDEV. Dans cet exemple, nous abordons deux thèmes principaux : 1/ Comment se connecter à une socket 2/ Comment créer une socket Résumé de l'exemple livré avec WINDEV : Cet exemple présente les différentes fonctions de gestion des sockets livrées en standard avec WINDEV. Pour utiliser cet exemple, vous devez entrer dans votre carnet d'adresse une liste de contacts en les identifiant par un nom et l'adresse IP de leur machine. Lors du lancement de l'application, le programme recherche les contacts accessibles (donc qui ont lancé cette application sur leur poste). En double-cliquant sur un contact "connecté" une fenêtre de discussion instantanée s'ouvre et permet de communiquer avec le contact
|
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|