PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Présentation
  • Gestion simple des threads
  • Principe
  • Fonctions WLangage
  • Caractéristiques d'un thread
  • Caractéristiques des threads
  • Accès aux éléments existants et contexte HFSQL
  • Recommandations pour les traitements réalisés par le thread
  • Traitements interdits
  • Traitements d'une application WINDEV
  • Traitement d'exception et threads
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
Une application est en cours d'exécution. Cette application s'exécute dans un thread principal.
A tout moment, cette application peut lancer un thread secondaire : ce thread s'exécute en parallèle de l'application. Ce thread correspond à une procédure (locale ou globale) de l'application.
Ce thread secondaire va s'exécuter en parallèle de l'application principale. Il est possible de réaliser dans ce thread tous les traitements réalisables en tâche de fond : réception des emails, ...
Remarque : un thread efficace est un thread qui attend un événement spécifique, par exemple une action de l'utilisateur, la réception d'un appel téléphonique ou d'un email, ...
Remarque : A partir de la version 19, HFSQL est le nouveau nom de HyperFileSQL.
Versions 17 et supérieures
WINDEV MobileUniversal Windows 10 App Cette fonctionnalité est désormais disponible pour les applications Windows Phone.
Nouveauté 17
WINDEV MobileUniversal Windows 10 App Cette fonctionnalité est désormais disponible pour les applications Windows Phone.
WINDEV MobileUniversal Windows 10 App Cette fonctionnalité est désormais disponible pour les applications Windows Phone.
Versions 21 et supérieures
WINDEVWINDEV MobileUniversal Windows 10 App Cette fonctionnalité est désormais disponible en mode Universal Windows 10 App.
Nouveauté 21
WINDEVWINDEV MobileUniversal Windows 10 App Cette fonctionnalité est désormais disponible en mode Universal Windows 10 App.
WINDEVWINDEV MobileUniversal Windows 10 App Cette fonctionnalité est désormais disponible en mode Universal Windows 10 App.
Gestion simple des threads

Principe

Un thread secondaire est créé avec la fonction ThreadExécute.
Un thread secondaire est automatiquement arrêté lorsque :
  • la procédure correspondant au thread est terminée,
  • l'objet à l'origine de thread est fermé.
Pour forcer l'arrêt :
  • d'un thread secondaire, utilisez la fonction ThreadArrête.
  • Versions 19 et supérieures
    du thread en cours, utilisez la fonction ThreadFin.
    Nouveauté 19
    du thread en cours, utilisez la fonction ThreadFin.
    du thread en cours, utilisez la fonction ThreadFin.
Attention : Si lors de l'arrêt d'un thread, une fonction WLangage est en cours d'exécution, l'arrêt ne sera effectif qu'après l'exécution de la fonction.

Fonctions WLangage

Les fonctions suivantes permettent une gestion simple des threads :
Versions 09 et supérieures
ThreadArrête
Nouveauté 09
ThreadArrête
ThreadArrête
Arrête un thread secondaire.
Versions 09 et supérieures
ThreadAttend
Nouveauté 09
ThreadAttend
ThreadAttend
Attend la fin de l'exécution du thread désigné.
Versions 16 et supérieures
ThreadCourant
Nouveauté 16
ThreadCourant
ThreadCourant
Renvoie le nom du thread en cours d'exécution.
Versions 09 et supérieures
ThreadEtat
Nouveauté 09
ThreadEtat
ThreadEtat
Renvoie l'état actuel d'un thread.
Versions 09 et supérieures
ThreadExécute
Nouveauté 09
ThreadExécute
ThreadExécute
Lance l'exécution d'un thread secondaire.
Versions 19 et supérieures
ThreadFin
Nouveauté 19
ThreadFin
ThreadFin
Termine l'exécution du thread en cours.
Versions 09 et supérieures
ThreadMode
Nouveauté 09
ThreadMode
ThreadMode
Change le mode de gestion des threads.
Versions 10 et supérieures
ThreadPause
Nouveauté 10
ThreadPause
ThreadPause
Temporise le thread en cours pour la durée indiquée.
Versions 09 et supérieures
ThreadPriorité
Nouveauté 09
ThreadPriorité
ThreadPriorité
Renvoie ou modifie le niveau de priorité d'un thread.
Versions 09 et supérieures
ThreadReprend
Nouveauté 09
ThreadReprend
ThreadReprend
Relance l'exécution d'un "thread" précédemment suspendu par la fonction ThreadSuspend.
Versions 09 et supérieures
ThreadSuspend
Nouveauté 09
ThreadSuspend
ThreadSuspend
Suspend temporairement l'exécution du thread désigné.
Pour plus de détails sur toutes les fonctions permettant de manipuler les threads, consultez Fonctions de gestion des threads.
Caractéristiques d'un thread

Caractéristiques des threads

En WLangage, un thread secondaire peut être associé à :
  • une procédure locale à la fenêtre en cours,
  • une procédure globale au projet,
  • une méthode de classe,
  • une méthode globale de classe.

Accès aux éléments existants et contexte HFSQL

Lors de la création d'un thread, toutes les déclarations, objets, éléments existants sont communs :
  • au nouveau thread secondaire.
  • au thread dans lequel le thread secondaire a été créé (dans la plupart des cas, correspond au thread principal).
Ces threads peuvent ainsi accéder aux variables, procédures, ... Toutes les variables créées après le lancement d'un thread sont accessibles uniquement dans le thread où elles sont créées.
De même, lors de la création d'un thread, le contexte HFSQL est automatiquement dupliqué. Chaque thread manipule un contexte HFSQL spécifique. Il y a autant de contextes HFSQL que de threads en cours d'exécution. La totalité du contexte HFSQL est recopiée (filtre, condition de recherche, ...). Dans chaque thread, le contexte HFSQL évolue indépendamment.
Il est ainsi possible par exemple de réaliser deux parcours différents sur le même fichier dans deux threads différents.
Exemple : Un filtre est créé sur le fichier Client. La fonction ThreadExécute est appelée pour créer le thread CTX2. Dans chaque thread, le fichier client est filtré. Si dans le thread principal, le filtre est désactivé, le filtre sera toujours actif dans le thread CTX2.
Cas particuliers :
  • Gestion assistée des erreurs HFSQL : Si plusieurs threads sont utilisés sur des fichiers de données, il est conseillé de personnaliser la gestion des erreurs HFSQL pour ne pas afficher les fenêtres par défaut. Pour cela, utilisez la fonction HSurErreur pour désactiver la gestion automatique des erreurs ou pour rediriger la gestion des erreurs vers une procédure personnalisée (sans affichage de fenêtres). Pour plus de détails, consultez Gestion assistée des erreurs HFSQL.
  • Ecritures et affectations dans un thread : Si des écritures ou des affectations sont effectuées dans un thread, les autres threads en cours d'exécution ne partagent pas ces informations. Certaines incohérences peuvent apparaître.
Exemple :
Code Thread 1Code Thread 2
a=i
a++
i=a
b=i
b++
i=b
Ces deux threads partagent les variables mais ne gèrent pas l'accès aux ressources communes. Si le thread 1 est exécuté avant le thread 2, i vaudra 1 au lieu de 2.
Remarque : Pour partager une affectation entre plusieurs threads, il est nécessaire d'utiliser des sémaphores. Pour plus de détails, consultez Gérer les sémaphores dans les threads.
Recommandations pour les traitements réalisés par le thread

Traitements interdits

Attention : Il n'est pas possible d'exécuter dans les threads les traitements suivants :
Attention : il est interdit de manipuler l'interface (fenêtres, champs, ...) dans un thread secondaire.
Lorsqu'un thread secondaire doit interagir avec l'utilisateur ou mettre à jour l'interface, il doit utiliser un traitement lancé depuis le thread principal. Ce traitement peut correspondre à :
  • une procédure globale du projet ou une procédure locale (d'une fenêtre, ...) appelée par la fonction ExécuteThreadPrincipal,
  • le traitement "Demande de mise à jour de l'affichage" d'une fenêtre exécuté grâce à la fonction DemandeMiseAJourIHM.

Traitements d'une application WINDEV

Par défaut, tout traitement WINDEV (code de clic d'un bouton par exemple), toutes les procédures, les méthodes des classes ne peuvent être exécutés que par un seul thread à un moment donné.
Pour permettre à plusieurs threads d'exécuter ces traitements en même temps, il est nécessaire de :
  1. Changer le mode de gestion par défaut des threads (fonction ThreadMode).
  2. Gérer dans le code de l'application les sections critiques et les sémaphores.
Java En Java, tout traitement (code de clic d'un bouton par exemple), toutes les procédures, les méthodes de classes peuvent être exécutées par plusieurs threads en même temps. Pour empêcher que plusieurs threads exécutent le même code en même temps, il est nécessaire d'ajouter dans le code de l'application des sections critiques ou des sémaphores.

Traitement d'exception et threads

Si un traitement d'exception général est effectué dans le code d'initialisation du projet, il sera déclenché si une exception survient :
  • dans le thread principal,
  • dans un thread secondaire lancé par la fonction ThreadExécute.
Cependant, si le thread secondaire déclenche une exception, il ne sera pas possible de connaître son origine avec la fonction ExceptionInfo dans le code du projet. Pour connaître l'origine d'une exception dans un thread secondaire, il faut inclure le traitement de l'exception dans le thread secondaire.
Liste des exemples associés :
Les threads Exemples unitaires (WINDEV Mobile) : Les threads
[ + ] Utilisation des threads dans une application :
- exécuter une procédure sous forme d'un thread
- arrêter un thread
- exécuter une procédure nécessitant des paramètres sous forme d'un thread
Les threads (pool) Exemples unitaires (WINDEV Mobile) : Les threads (pool)
[ + ] Utilisation des threads avec les fonctions WLangage.

Dans cet exemple, nous abordons 2 thèmes principaux :
1/ L'exécution de processus lancés en parallèle (threads)
2/ Comment limiter le nombre de threads en exécution à un instant donné

Rappel : un "thread" est un processus lancé en parallèle de l'application en cours ("thread" principal).
Il est par exemple possible de lancer l'exécution d'une tâche en traitement de fond (sauvegarde, ...).
Les threads sont très utiles dans le domaine industriel: superviseur, applications avec contrôle de process en temps réel,…
Les threads Exemples unitaires (WINDEV) : Les threads
[ + ] Utilisation des threads dans une application :
- Exécuter une procédure sous forme d'un thread
- Arrêter un thread
- Exécuter une procédure nécessitant des paramètres sous forme d'un thread
Les threads (pool) Exemples unitaires (WINDEV) : Les threads (pool)
[ + ] Utilisation des threads :
- Exécution de processus lancés en parallèle
- Limitation du nombre de threads en exécution à un instant donné

Rappel: un "thread" est un processus lancé en parallèle de l'application en cours ("thread" principal).
Il est par exemple possible de lancer l'exécution d'une tâche en traitement de fond (sauvegarde, ...).
Les threads sont très utiles dans le domaine industriel: superviseur, applications avec contrôle de process en temps réel,…
WD Utilisation des sockets Exemples didactiques (WINDEV) : WD Utilisation des sockets
[ + ] Cet exemple illustre les fonctions "Socket" de WINDEV dans une utilisation de type client/serveur.
Dans cet exemple, nous abordons deux thèmes principaux :
1/ Comment se connecter à une socket
2/ Comment accepter une demande de connexion
3/ Comment écrire ou lire sur 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, il est nécessaire de lancer une première instance de l'exemple en mode "serveur". Ensuite, en donnant le nom de la machine faisant office de serveur et un pseudonyme, vous pouvez vous connecter à cette application en mode "client". Il est alors possible d'envoyer des messages à tous les utilisateurs connectés. Dans cet exemple, à chaque connexion est associée : un thread et une socket .
WD Télésurveillance Exemples complets (WINDEV) : WD Télésurveillance
[ + ] Cet exemple illustre la transmission d’images provenant d’une Web caméra à travers un réseau (Intranet, Internet…).
Dans cet exemple, nous abordons les principaux thèmes suivants :
1/ Champ Web Caméra
2/ Utilisation des fonctions Socket
3/ Utilisation des fonctions Thread
4/ Détection de mouvements
Résumé de l'exemple livré avec WINDEV :
Cet exemple permet de transmettre les images filmées par une Web Caméra à travers un réseau (intranet, Internet, ...)
Cette application regroupe les parties "Serveur de diffusion" et "Moniteur".
Il est ainsi possible de :
- transmettre les images de la Web Caméra
- sélectionner "un moniteur"
- analyser l'image pour détecter un mouvement. Dans ce cas, il est possible d'alerter le ou les destinataires concernés (ou "moniteurs")
- connecter jusqu'à 8 Web Caméras différentes, et activer pour l'une ou l'autre la détection de mouvements
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire