Bonjour et merci d'avance à ceux qui pourront m'aider,
Je suis un étudiant, qui, dans le cadre d'un stage, doit reprendre et améliorer un programme de pilote d'un générateur de signaux TV et de mesures de ces signaux. Ayant fait un peu de C/C++ dans mes études, je possède les bases mais je n'ai jamais entendu parler des threads auparavant. Je m'excuse donc par avance si mes questions sont floues et/ou stupides.
Ce programme a été édité il y a plus de 3 ans. Il marchait sur un poste mais au moment de le porter sur différents postes, les problèmes arrivent, notamment au niveau des Thread. Le programme doit traiter 2 threads, la thread principale, qui rafraichit le programme, et acquiert les mesures nécessaires. ainsi qu'une autre afin d'envoyer des données nécessaires aux mesures en continu au générateur de signaux.
Le problème est que le programme s’arrête automatiquement après la fonction Start(); qui est sensée "démarrer" le thread d'envoi des données. Visual Studio 2005 m'indique que le programme ainsi que la thread Win32 se sont arrêtés avec le code 2. Après une recherche sur différents sites, je n'ai pas réussi a trouver ce que signifiait cette erreur.
Merci de m'éclairer
Ici, je déclare et paramètre la thread
Et quand on lance le thread, ça quitte.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 ref class ThreadParametre { private: char *_commande; public: // Constructeur ThreadParametre(char *commande) { _commande = commande; //paramètre de la fonction utiliser lors du Thread } // Exécution de la méthode du thread void Envoi_Donnees() { int RetValue(0); Player ThePlayer; static char argv[32][32]; char* pargv[32]; char* cmd= _commande; char* pt = cmd; // extract elemantary commands from the command string int i = 0; while (true) { pt = strstr(cmd, " "); // find space if (pt == 0) // space not find { strcpy(argv[i++], cmd); // last command break; // end of cmd } *pt = 0; // end of string strcpy(argv[i++], cmd); // one command pargv[i] = &argv[i][0]; // init pointer *pt++; // next command strcpy(cmd, pt); // erase previous command } if (RetValue==0) { try { RetValue = ThePlayer.Play(i-1, pargv); if (RetValue==-1) exit(2); } catch(...) { RetValue = -1; } } else return; } };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 f (button_OK->Text=="Changer")// si les limites du graph sont validés on peut activer le lancement des mesures. { button_lancer->Enabled=true; } else { button_lancer->Enabled=false;//sinon on n'active pas le lancement des mesures } envoyer->Start(); //on démarre le thread
Je vous envoie le .cpp complet.
Partager