Pb avec fonctin readFile qd j'utilise des Threads

jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010 - 26 juin 2003 à 09:22
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010 - 26 juin 2003 à 14:00
Bonjour à tous !

J'tilise la fonction ReadFile pour lire sur le port COm du PC.
La lecture fonctionne correctement sans les Threads.
J'ai décidé de mettre en place les Threads et là ça ne veut plus marcher.
Pas d'erreur à la compil mais qd j'exécute, ça fonctionne jusqu'au ReadFile !!!!!

INT Blick::lireCOM(LPVOID ptr)
{
Blick* pFlag = (Blick*) ptr;
AfxMessageBox ( "Test pFlag....");
pFlag->lecture();
return 0;
}

void Blick::lecture()
{
while(1)
{
AfxMessageBox ( "Test attente trame....");
com1->lire(trame,total,&nbre); // dans un tableau
AfxMessageBox ( "OK une Trame recue...."); traiterTrame();
}
}

La fonction lire utilise ReadFile et c là que ça plante

////////////////////////////////////////////////////////////
void CLiaisonRS232::lire(unsigned char* donnees, int noctets, int* nb)
{
BOOL res;
ULONG nbOctets;

// Lecture reponse
res = ReadFile(
hCOM, // Handle du port
donnees, // Adresse buffer
noctets, // Nb octets à lire
&nbOctets, // Nb octets lus
NULL); // Lecture synchrone

*nb=(int)nbOctets;
}

Merci

3 réponses

vidarusny Messages postés 31 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 3 décembre 2009
26 juin 2003 à 09:55
Quand tu utilise les threads sur une seule ressource tu dois synchroniser tes threads. Pour ca en MFC tu as les CSemaphore.Ce qui te permet d'attendre que t'as ressource soit libre, et qui peut eviter le plantagede ta fonction ReadFile.

Pour l'utiliser tu la déclare dans "Blick" (CSemaphore block) et tu l'utilise comme suit :
block.Lock();
com1->lire(trame,total,&nbre); // dans un tableau
block.Unlock();
0
vidarusny Messages postés 31 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 3 décembre 2009
26 juin 2003 à 09:56
Quand tu utilise les threads sur une seule ressource tu dois synchroniser tes threads. Pour ca en MFC tu as les CSemaphore.Ce qui te permet d'attendre que t'as ressource soit libre, et qui peut eviter le plantagede ta fonction ReadFile.

Pour l'utiliser tu la déclare dans "Blick" (CSemaphore block) et tu l'utilise comme suit :
block.Lock();
com1->lire(trame,total,&nbre); // dans un tableau
block.Unlock();
0
jujunio Messages postés 37 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 22 septembre 2010
26 juin 2003 à 14:00
Merci de ton aide VIDARUSNY mais qd je compile, connait pas CSemaphore, ni block, lock et unlock. Je crois qu'il manque une Classe...
peux-tu me détailler comment faire ???

MERCI
0
Rejoignez-nous