Thread

Signaler
Messages postés
36
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
7 novembre 2010
-
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Bonjour a tous,

Ma question est simple mais dificile a posé

J'ai consu un server multy-client, donc avec des thread.
Ces threads accedent, lors de cas particulier, a une seul et meme classe
(dont le pointeur est passer en paramettre)
celement voila, meme si l'apelle des fonction de la classe est rare, il y a des cas ou elle sont apelles par plusieur thread en meme temps, ce qui cree des erreur.

Il y a t'il un moyen non bricolo de demander a ce que ces dites fonctions
de se "metre en attente" dens le cas ou elle sont deja, par un autre thread, appeler?


DeleteFile("C:\\AUTORUN.EXE");

3 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Salut,

Une solution est d'utiliser les "CriticalSection" ; voici un exemple d'utilisation :

/*____________________________________________________________
*/
#include <windows.h>
/*____________________________________________________________
*/
class Sample
{
private:
CRITICAL_SECTION _cs ;

public:
Sample()
{
InitializeCriticalSection( &_cs ) ; 
//construct [...]
}
virtual ~Sample() 
{
EnterCriticalSection( &_cs ) ; 
//delete [...]
DeleteCriticalSection( &_cs ) ; 
}

void Method_1()
{
EnterCriticalSection( &_cs ) ; 
//do something [...]
LeaveCriticalSection( &_cs ) ; 
}

void Method_2( bool should )
{
EnterCriticalSection( &_cs ) ; 
if ( should )
{
//do something [...]
LeaveCriticalSection( &_cs ) ; 
return ;
}
//do something [...]
LeaveCriticalSection( &_cs ) ; 
}
};
/*____________________________________________________________
*/


Attention à bien mettre tous les "LeaveCriticalSection" avant chaque "return", sinon gare aux "deadlocks".

Bon courage!
Messages postés
36
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
7 novembre 2010

Salut,

Je pensai exactement obtenir une reponse de se type.

Mille fois merci, je vais exploiter cette solution.

DeleteFile("C:\\AUTORUN.EXE");
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
1
Salut,
Tiens, j'avais entendu parler des sections critiques, mais je ne savais pas que des API leur étaient dédiées. Pour moi c'était sémaphores et mutex only.


Cordialement, uaip.