|
|
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
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
-->Message édité par icare_olivier le 14/08/2005 20:12:00<--
|