jlingenierie
Messages postés7Date d'inscriptionmardi 20 avril 2004StatutMembreDernière intervention12 mai 2004
-
10 mai 2004 à 17:26
cs_valoue
Messages postés72Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention13 mai 2011
-
18 juin 2004 à 13:56
Salut, j'essaye de faire une thread et de lui passer une structure en paramètre, j'ais compris comment faire pour passer un int , un char en parametre , mais une struct rien a faire , ca passe pas ....
Si kelkun pouvait donner un exemple, simple et clair ...avec l'utilisation des champs de la struc dans la thread ...
Merci d'avance.
@++
cs_valoue
Messages postés72Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention13 mai 2011 18 juin 2004 à 09:13
Et lors de la reception du param dans ta méthode FuncThrd tu fais comment ??? Pourrais je voir le contenu de la méthode FuncThrd, au moins le cast et la recupération d'info de ta structure, stp ???
Où est declarée ta structure ??
J'ai les même soucis mais je n'arrive pas regler le pb !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 juin 2004 à 09:47
oui bien entendu dans le h c'est:
typedef struct _MASTRUCT {
// membres ici
} MASTRUCT;
par contre
MASTRUCT mst;
doit se trouver en variable globale.
Si est sur pile, declare dans une func qui est quittee avant fin du thread, adresse devient invalide, OK ?
cs_valoue
Messages postés72Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention13 mai 2011 18 juin 2004 à 10:18
MErci bcp, ça marche.
Par contre, je suis obligée de declarer
typedef _mastruct{
...
} lastructure;
lastructure st;
en variable globale sinon, ça marche pas.
Sinon, en fait, je veut etre en mesure de renvoyer le contenu de la structure (remplie dans le thread) à la procedure appelante. Mais comment faire:
DWORD WINAPI recoit(LPVOID *sote){
LPTHREAD_PARAMS *stl;
stl = (LPTHREAD_PARAMS*)sote;
//je remplis un champs de la structure stl
//jusque là no pb, mais ensuite ça coince ...
(LPTHREAD_PARAMS *)sote = stl; //ça ça marche pas !!
}
Comment réaffecter le contenu mis a jour, pour pouvoir le recuperer dans la procédure appelante ???
Tu saurais comment faire stp?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 juin 2004 à 10:28
du moment que tu as pointeur sur structure, tu modifies valeurs comme tu veux, chaque func qui s'en servira aura les nouvelles valeurs.
Tiens a toi de remplir avec des valeurs qui ne se perdent pas en route, toujours l'histoire des valeurs sur pile mais je pense que tu as saisi.
cs_valoue
Messages postés72Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention13 mai 2011 18 juin 2004 à 11:46
G une erreur lors de l'edition des liens, et je ne comprends pas pourkoi:
CommunicationClient error LNK2019: symbole externe non résolu "public: static unsigned long __stdcall CcomEthernet::recoit(void *)" (?recoit@CcomEthernet@@SGKPAX@Z) référencé dans la fonction "public: void __thiscall CcomEthernet::recoitTrame(char *)" (?recoitTrame@CcomEthernet@@QAEXPAD@Z).
Pourtant, ma methode du thread est:
static DWORD WINAPI envoi(LPVOID sote){
...
return 0;
}
et l'appel se fait depuis:
hthread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &recoit, (DWORD*)&st, 0, &threadID);
et sachant que st est de type:
mastructure st;
je ne comprends rien du tout ! je ne vois pas pourkoi il n'arrive pas a faire l'edition des liens ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 juin 2004 à 12:15
je disais 'static' pour la func de thread quand est declaree dans une classe.
bah si pose prob, tu la sors de la classe et tu mets dans le cpp qui s'en sert, devrait regler le prob. Faut bien sur que n'ait pas besoin de toucher des membres de classe.