Bonjour à tous,
j'ai un problème que je n'arrive pas à comprendre.
Je lance à partir de mon thread principal un thread secondaire appeler "procedureTh".
procedureTh peut s'arrêter pour plusieurs raisons : arrêt du programme, appui sur un bouton demandant son arrêt ou une erreur lors de son execution.
Il prend du temps et ne comporte pas de boucle donc je ne peux pas l'arrêter gentiment avec un booléen.
Je suis donc "obligé" (je ne connais pas d'autres moyens) d'utiliser abort().
J'appelle donc une fonction dans mon thread principale :
Et dans mon thread j'ai bien un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void fermer_procedure() { if(procedureThIsRunning) { procedureTh.abort(); //puis des fonctions d'enregistrement ou de changement de variables rien de bien méchant. } }
et aucun Finally qui pourrait être lancé et empêcher la fermeture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 catch(ThreadAbortException e) { //ecriture dans un fichier log }
Le fichier log est bien complété, mon thread se ferme correctement, mais je ne reviens jamais sur les lignes qui suivent procedureTh.abort() dans le thread principal. De temps en temps il y en a une ou deux qui sont exécutées mais j'imagine qu'elles le sont avant que le procedureTh prenne la main.
Si quelqu'un a une idée du pourquoi ? ou une manière détournée d'exécuter ces lignes. Merci d'avance.
Partager