Pb avec fonctin readFile qd j'utilise des Threads

Signaler
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
22 septembre 2010
-
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
22 septembre 2010
-
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

Messages postés
31
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
3 décembre 2009

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();
Messages postés
31
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
3 décembre 2009

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();
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
22 septembre 2010

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