LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
11 févr. 2010 à 15:16
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
12 févr. 2010 à 11:25
Bonjour,
Je cherche à faire communiquer 2 threads ensemble, on ma conseillé sur ce site les fonctions Postthreadmessage et Peekmessage et effectivement cela correspond tout à fait à mes attentes
cependant lorsque j'essaye de faire passer des paramètres je rencontres quelques soucis(du a ma méconnaissance des lparam et wparam)
en gros si j'envoi un int comme ceci:
int test =99;
PostThreadMessage(HandleMainThread,MSG_1,0,(LPARAM)test);
je reçois bien 99 dans msg.lparam
mais je ne sais aps comment faire pour passer toutes une structure style
struct test{
int toto
float tata
bool titi
}
ni pour passer plusieurs variables(indépendantes)
merci de m'aider à mieux comprendre le fonctionnement!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 févr. 2010 à 15:48
Une possibilité:
Fais un VirtualAlloc, tu remplis cette adresse des données de ta struct, passe cette adresse en LPARAM au thread qui fera le VirtualFree quand fini de s'en servir.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 févr. 2010 à 17:54
Je n'utilise jamais de CRT mais devrait aller.
VirtualAlloc garantit l'alignement sur taille de page system, soit 4 Ko donc ALIGN 16 au mini. C'est ce qui convient impec si on doit transmettre des données pour calculs par SSE2 ou sup.
ciao...
BruNews, MVP VC++
Vous n’avez pas trouvé la réponse que vous recherchez ?
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 12 févr. 2010 à 10:45
Ok, merci ça semble marchait.
Juste pour infos, si je veux faire passer plusieurs variables mais qui ne sont pas dans la même structure, comment faire avec un seul "lparam" ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 févr. 2010 à 11:19
Par force le destinataire doit connaitre ce qu'il attend, sinon possible mais il faudrait au début du bloc mémoire un header définissant ce qui suit.
pmem = (BYTE*) VirtualAlloc(0, LEN, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
On met dedans une struct DATA et 2 DWORDs:
memcpy(pmem, myData, sizeof(DATA));
*((DWORD*) (pmem + sizeof(DATA)) = dw1;
*((DWORD*) (pmem + sizeof(DATA) + 4) = dw2;
En C tout est permis, la seule limitation est dans le crane.