Bonjour,
suite à un conseil donné, j’emploie un thread pour lancer une fonction (appelant d'autres fonctions) afin de pouvoir créer un bouton "Annuler".
Ma difficulté vient qu'il semble s'arrêter au début de sa tâche.
La fonction que lance le thread contient des fonctions lançant la lecture de répertoire ainsi que la lecture de fichiers csv et leurs insertions dans sql server.
pour une raison que j'ignore, il s'arrête après avoir créé une table et avoir inséré le contenu du premier fichier ( en laissant tomber le reste des fichiers).
Je me suis demandé si le problème ne venait pas des catchs qui se situent à l'intérieur des fonctions qui doivent interrompre le thread au moindre problème.
Mon code fonctionne hors du thread mais dés que j'emploie le thread, je ne n'arrive pas à aller au bout et récupérer des informations comme le nombre d'insertions effectués. On dirait que le thread s'arrête brutalement.
mon code est assez simple
avant que l'IHM soit lancé, je crée le thread d'une fonction qui tourne en boucle jusqu'à ce qu'il reçoit un message.
Dans mon main
Puis une boucle infinie qui attente un signal de démarrage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Thread^ myThread = gcnew Thread( gcnew ThreadStart( attente ) ); myThread->Start();
Qu'est-ce qui peut interrompre brutalement un thread?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 void setFlagActive() { Test::flagscript = true; } bool reponse() { return Test::flagscript; } void attente() { //System::Windows::Forms::MessageBox::Show("Thread"); if (Test::flagscript == true) { //System::Windows::Forms::MessageBox::Show("flag true"); } while(1) { if (reponse()== true) { System::Windows::Forms::MessageBox::Show("flag est vraie"); create_db(); choix_répertoire(); break; } Thread::Sleep(10); } }
merci d'avance pour toute idée.
Partager