Bonjour à tous,
Je galère avec mon affaire... qui n'est pas facile à expliquer...
J'ai un thread (qu'on va appeler Thread0) qui est appelé au démarrage de mon application avec la comande ThreadExecute...
Celui-ci tourne en boucle toutes les 5 min.
Il lance 2 autres thread l'un derrière l'autre (Thread1 et Thread2).
Pour éviter que le 2eme ne se lance avant que le premier finisse, j'utilise les signaux (créés et ouverts dans le code d'init du projet) :
le signal de Thread1 est ouvert à la fin de son traitement, idem pour le Thread2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SignalModifie("Thread1",signalFermé) ExécuteThreadPrincipal("Thread1") SignalAttend("Thread1") SignalModifie("Thread2",signalFermé) ExécuteThreadPrincipal(Thread2) SignalAttend("Thread2")
Je souhaite empêcher la fermeture de l'application (via la croix rouge en haut à droite) tant que les 2 thread ne sont pas terminés (si ils sont en cours)
Pour ce faire,
Sur l’événement Fermeture de ma fenêtre principale, je fait ouvrir une fenêtre qui dit (patienter blablabla).
Dans le code de fin d'initiaisation de cette fenêtre, j'utilise :
Et du coup mon application doit donc se fermer quand les Thread se finissent ! où s'ils ne sont pas en cours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SignalAttend("Thread1") SignalAttend("Thread2") Ferme(FEN_Patienter)
et bien non !!!
J'explique les cas :
- Si les Thread ne sont pas cours l'application se ferme = OK
- Si Thread1 et 2 sont finis alors = OK
- Si Thread1 est en cours d'execution, alors il attend la fin de Thread1 (super !!) mais thread2 ne démarre pas !
Donc la fenetre s'ouvre mais ça bloque ??!!- Si Thread2 est en cours, la fenetre s'ouvre, mais le Thread2 ne s'arrête pas, et la fenêtre reste ouverte !!??
J'ai l'impression que qaund je clique sur la croix rouge, cela me tue le Thread0 qui gère le lancement du 1 et 2...
je galère a essayer avec des debug, trace et autre, mais je ne parviens pas à trouver la bonne méthode.
Je me demande même si je m'y prends bien...
Quelqu'un peut m'aider ?
Merci d'avance !!!
Partager