Thread

malkommalkom Messages postés 36 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 7 novembre 2010 - 10 nov. 2009 à 21:10
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 14 nov. 2009 à 02:42
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

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
11 nov. 2009 à 08:38
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!
0
malkommalkom Messages postés 36 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 7 novembre 2010
11 nov. 2009 à 12:49
Salut,

Je pensai exactement obtenir une reponse de se type.

Mille fois merci, je vais exploiter cette solution.

DeleteFile("C:\\AUTORUN.EXE");
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 nov. 2009 à 02:42
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.
0
Rejoignez-nous