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
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
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 DemandeMiseAJourUI,
  • Instaurer un dialogue par messages entre les threads (fonctions PostMessage et Evénement).
Liste des exemples associés :
WD ThreadUI 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 :
  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)


Liste des exemples associés :
WD Messagerie Instantanée 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
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 13/09/2024

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