Communication thread

Signaler
Messages postés
12
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
11 mai 2008
-
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011
-
bonsoir tout le monde, j'ai un soucis technique j'aurais voulu savoir comment vous vous y prendrais
le soucis c'est que je dévellope un programme avec un chronométrage, donc mes capteurs se sont des cellule photoelectrique relié a un module arduino diciemilia. se module créer une liaison série sur l'ordinateur pour pouvoir communiquer avec celui ci, j'ai 3 capteur 1 au départ un de sécurité et un a l'arrivé, j'ai programmer ma carte entrée sortie pour recevoir un caractère spécifique en fonction du capteur. donc mon chronométrage est simple capteur 1 on enregistre le temps, capteur 3
 on enregistre le temps - le tps de capteur 1

mais bon j'ai une interface graphique, donc pour éviter de figer l'interface il faudrait que je créer un thread, créer le thread c'est pas difficile j'ai réussit a le faire, mais se qui m'ennuie c'est que les variables qui sont dans mon interface ne sont pas dans mon thread et vice versa, en fait j'ai besion d'envoyer des variables de mon interface vers le thread, et une fois le chronométrage effectué de récupérer les variables du thread vers l'interface graphique, j'ai vu que l'on pouvait créer des deléguer pour qu'a partir du thread on puisse lancer une fonction du processus principales mais en aucun cas passer une variable. si quelqu'un a une solution je suis preuneur.

5 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Tu peux envoyer des messages entre threads cf PostThreadMessage()
Messages postés
12
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
11 mai 2008

heu c vague comme réponse, tu peu détailler un peu svp
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
C'est pas vague; si tu as construit une interface graphique tu sais déjà ce qu'est un message non? A moins que tu l'ai pas faite en natif. Dans ce cas une petite explication :
à chaque thread est associée une file de messages; ceux-ci sont de nature diverses : pour la plupart ils ont trait aux événements des fenêtres (clics, affichage...) mais tu peux en créer des personnalisés.
Un petit exemple plus ou moins adapté à ton cas :

#define WM_START_CHRONO (WM_USER+0x1)
#define WM_QUIT_THREAD (WM_USER+0x2)
#define WM_CHRONO_RESULT (WM_USER+0x3)

DWORD __stdcall ThreadChrono(LPVOID idMainThread)
{
   MSG msg;
lbl_MsgLoop:
   BOOL bResult=GetMessage(&msg,NULL,WM_USER,WM_NULL); // récupère un message 
   if(bResult==-1) return 1; // si erreur dans la récupération on quitte
   if(msg.message==WM_QUIT_THREAD) return 0x0; // si message quitter on quitte le thread
   if(msg.message==WM_START_CHRONO) // si on demande le chronométrage
   {
      // ton code de chrono
   }
   PostThreadMessage((DWORD)idMainThread,WM_CHRONO_RESULT,la_valeur_résultat,0);
   goto lbl_MsgLoop; // on va attendre un autre message
}

utilisation :
HANDLE hThisThread=GetCurrentThread();
DWORD idThisThread=GetThreadId(hThisThread),idThreadChrono;
HANDLE hThreadChrono=CreateThread(0,0,ThreadChrono,(LPVOID)idThisThread,0,&idThreadChrono);
...
// quand chronométrage souhaité
PostThreadMessage(idThreadChrono,WM_START_CHRONO,0,0);

// pour recevoir la valeur : si tu as une interface graphique, tu as forcément quelque part une boucle de messages donc il suffit de traiter le message WM_CHRONO_RESULT

Voila, je sais pas si ça marche tel quel mais du moins il y a l'idée générale; reporte-toi à MSDN pour l'emploi des différentes fonctions.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
j'oubliais : pour quitter le thread chrono proprement (quand tu fermes l'application par exemple) :
PostThreadMessage(idThreadChrono,WM_QUIT_THREAD,0,0);
Messages postés
96
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
7 mars 2011

donc ce que tu ve faire si g bien compris c récupérer des variables du thread?? si c ça confirme.
boncourage