01net    Web


Actuellement en ligne : 145 Utilisateurs dont 7 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Problème de PostThreadMessage
Auteur
Message
 
<     1       >
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 14/08/2005 20:09:07  
Voter pour ce message
J'expose mon problème :
Je programme une application multithreadée en C++ avec les librairies windows
Afin de communiquer entre mes threads, j'ai cette fonction, qui permet d'envoyer des données via un pointeur (le dernier paramètre).
Précision : l'identifieur threadID est un enum :/ et la classe threads est un singleton, mais ca n'est pas important...tout ce qu'il faut savoir c'est que la fonction sendMsg et l'identifieur threads::id sont des membres statics de cette classe.

void threads::sendMsg(threadID thr ,int typeflag ,int size ,void* data)
{
if( ! PostThreadMessage(threads::id[thr],(UINT)data,typeflag,size) )
MessageBox(NULL,"message non envoyé","erreur",MB_OK);
}


Une fois les threads créés, et les messages queues de ces threads opérationelles, j'appelle la fonction sendMsg comme suit depuis un autre thread.

void* ins = new instruction("../maps/test.tvm");
threads::sendMsg(PHYSIC,LOAD,0,ins);
threads::sendMsg(PHYSIC,LOAD,0,NULL);



Et c'est à ce moment là que je tombe sur un problème que je n'avais jamais vu :
Le premier appel renvoie un message d'erreur, alors que le deuxième non.
En fait, c'est l'appel qui a un pointeur valide qui foire et qui fait appel à

MessageBox(NULL,"message non envoyé","erreur",MB_OK);

J'ai changé l'ordre d'appel, j'ai fait des dixaines d'appels successifs, j'ai tout bidouillé pour voir s'il ne s'agissait que d'une erreur de lancement du genre "le premier message foire", mais non ... quoi que je fasse, les appels avec pointeur valide foirent, et ceux avec pointeur NULL réussisent !

si quelqu'un comprends ca... je serais vraiment honoré qu'il me donne la solution de mon problème :whistle:

Une précision : la doc microsoft dit à propos de sendThreadMessage :

Call PostThreadMessage. If it fails, call the Sleep function and call PostThreadMessage again. Repeat until PostThreadMessage succeeds.


J'ai essayé...ca ne marche pas pour autant :heink:
-->Message édité par icare_olivier le 14/08/2005 20:12:00<--
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Problème de PostThreadMessage

Aller à :

Page générée en : 1.567s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Entretien du PC
Un logiciel simple et pratique pour optimiser les performances et la stabilité de votre PC.
Foot   
Platini-Wenger: la guerre ? Dérapages verbaux entre le président de l'UEFA et le coach d'Arsenal !