Salut à tous,
j'ai 2 programmes qui tournent en //, l'un en cpp l'autre en vbnet.
Celui en cpp, composé de 4 threads, enregistre des valeurs et stocke des messages textes dans un fichier texte et dans une mémoire partagée.
Ma mémoire partagée peut seulement contenir une string, qui est raffraichie à chaque nouveau message envoyé par le cpp. Chaque thread a accés à la fonction enregitrerMessage.
Le programme vbnet lui va lire la string qui est dans la mémoire partagée.
Le problème est que j'ai bien tous les messages qui s'affichent dans le fichier texte mais j'en pert la moitié dans vbnet...
J'ai synchronisé l'ensemble avec un mutex nommé et un événement nommé, mais apparement ça suffit pas.
Y a t-il une meilleur solution?
code du cpp :
int enregistrerMessage(char* message){
//blabla....
strftime(dateHeure,20,"%x;%X",newtime); // conversion en string
sprintf(buffer,"%s %cmessage n° %d : %s",dateHeure,'\t',numErr,message);
if (fprintf(fErr,"%s\n",buffer)>0){ // écrit dans le fichier texte
// réservation de la ressource
WaitForSingleObject ( mutexRessource, INFINITE );
strcpy(*pZone,buffer); // écrit dans la mémoire
PulseEvent(hEvent); // déclenche l'événement qui est dans vbnet
ReleaseMutex (mutexRessource); // relâche de la ressource
}
}
code dans vbnet :
while(true)
WaitForSingleObject(hEvent, INFINITE)
' réservation de la ressource
monMutex.WaitOne() ' mon mutex nommé qui est le même que dans cpp
monStr = Lecteur.LireMemoire ' lit la string dans la mémoire partagée
monMutex.ReleaseMutex() ' relache le mutex
Lamalice83