1 pièce(s) jointe(s)
Arrêt du programme suite à un thread
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
Code:
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;
}
}; |
Et quand on lance le thread, ça quitte.
Code:
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.