pupuce54980
Messages postés12Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention11 mai 2008
-
18 avril 2008 à 20:14
cs_neone
Messages postés96Date d'inscriptionmercredi 23 novembre 2005StatutMembreDernière intervention 7 mars 2011
-
22 févr. 2010 à 13:09
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.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 19 avril 2008 à 14:49
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 :
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
}
// 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.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 19 avril 2008 à 14:51
j'oubliais : pour quitter le thread chrono proprement (quand tu fermes l'application par exemple) :
PostThreadMessage(idThreadChrono,WM_QUIT_THREAD,0,0);
Vous n’avez pas trouvé la réponse que vous recherchez ?