|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
| [WD23] Conseil sur un thread |
| Iniciado por Der§en, 16,ene. 2019 12:59 - 6 respuestas |
| |
| | | |
|
| |
Miembro registrado 334 mensajes |
|
| Publicado el 16,enero 2019 - 12:59 |
Bonjour,
J'ai codé un thread qui est exécuté au lancement de mon programme, ce thread va lire , le status de plusieurs services sur mon serveur.
Pour qu'il sorte proprement du thread quand l'utilisateur clic sur la fermeture du programme, je met ma variable globale a Vrai, et je teste cette variable dans mon thread pour quiter le thread le plus proprement possible.
gbSortieDuProgramme est un booléen, section critique gbSortieDuProgramme = Faux
TEMPS_SERVICES est égale a 300 pour faire 5 minutes entre chaque exécution du thread.
AffichageDesServices est une procédure qui affiche dans un mémo le résultat du traitement.
Dite moi si c'est propre d’après vous ou s'il y a des choses a corriger ?
Procedure ListeDesServices() nAttente est un entier sMaListe est une chaîne
BOUCLE sMaListe = "" sMaListe += EtatEnTexte("SFTP") sMaListe += EtatEnTexte("ILE01") sMaListe += EtatEnTexte("ILE02") sMaListe += EtatEnTexte("ILE03") sMaListe += EtatEnTexte("ILE04") ExécuteThreadPrincipal(AffichageDesServices, sMaListe) nAttente = 0 TANTQUE nAttente < TEMPS_SERVICES ThreadPause(2s) Ajoute(nAttente, 2) SI gbSortieDuProgramme ALORS ThreadFin() FIN FIN
PROCEDURE INTERNE EtatEnTexte(LOCAL plEtat est une chaîne): chaîne lsRésultat est une chaîne SELON ServiceEtat(plEtat, "SRV-Prods") CAS serviceEtatArrêté: lsRésultat = "Arrêté" CAS serviceEtatAttenteArrêt: lsRésultat = "Attente Arrêt" CAS serviceEtatAttenteDémarrage: lsRésultat = "Attente Démarrage" CAS serviceEtatAttentePause: lsRésultat = "Attente Pause" CAS serviceEtatAttenteRelancement: lsRésultat = "Attente Relancement" CAS serviceEtatDémarré: lsRésultat = "Démarré" CAS serviceEtatEnPause: lsRésultat = "En Pause" CAS serviceEtatTimeout: lsRésultat = "Timeout" AUTRE CAS: lsRésultat = "Indéterminé" FIN RENVOYER ChaîneConstruit("- %1 : %2.%3", plEtat, lsRésultat, CR) FIN
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau - |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 16,enero 2019 - 14:50 |
Hello,
Oui çà à l'air correct. tu peux même mettre à la place de BOUCLE :
TANTQUE PAS gbSortieDuProgramme ALORS // Ton traitement en boucle FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 16,enero 2019 - 16:02 |
Merci pour le conseil, je vais faire la modif...
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau - |
| |
| |
| | | |
|
| | |
| |
| Publicado el 16,enero 2019 - 17:28 |
Si "ListeDesServices" est bien la procédure lancée en Thread, pourquoi ne pas seulement sortir de la procédure lorsque gbSortieDuProgramme est à Vrai ?
SI gbSortieDuProgramme ALORS RETOUR
Au moins le thread se termine "normalement"
Mais peut-être ai-je loupé quelque chose... |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 16,enero 2019 - 20:40 |
Christophe PRADEL a écrit :
Si "ListeDesServices" est bien la procédure lancée en Thread, pourquoi ne pas seulement sortir de la procédure lorsque gbSortieDuProgramme est à Vrai ? SI gbSortieDuProgramme ALORS RETOUR
Au moins le thread se termine "normalement" Mais peut-être ai-je loupé quelque chose...
Je vais tester ton idée mais le but de Threadfin est de m’assurer que le Thread est bien arrêté quand le programme s’arrete.
Ce qui n’est pas le cas actuellement, cela qui m’oblige à utiliser ThreadEtat et ThreadAttend en sortie de programme.
Donc, s’il y a une meilleure façon de faire, je suis preneur...
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau - |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 17,enero 2019 - 11:21 |
Il y a un truc que je fait surement mal car quand je quitte le programme sans aucun code pour stopper les thread dans la partie "Fermeture de la FEN_" et que le 'ThreadFin()' est bien présent dans ma procédure...
J'ai ce genre d'erreur:
1 Le thread 'SFTP' est toujours en cours d'exécution. Un arrêt forcé a été déclenché mais ceci peut provoquer des dysfonctionnements dans les autres threads. Mettez en place un système d'arrêt depuis le code du thread lui-même grâce la fonction ThreadFin.
Une idée ou suggestion ?
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau - |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 19,enero 2019 - 22:12 |
Comme j’ai des « surprises » à la fermeture de mon programme.
Je suis à la recherche d’un exemple de fonctionnement d’un thread secondaire qui fonctionne tout le temps du programme, quelqu’un aurait un exemple propre ?
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau - |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|