begin process at 2012 05 30 04:49:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Synchronisation de threads (Vista/Win7)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Synchronisation de threads (Vista/Win7)

jeudi 24 février 2011 à 11:08:25 | Synchronisation de threads (Vista/Win7)

Lutinore

Administrateur CodeS-SourceS
Salut, j'ai un problème pour synchroniser 2 threads, je pense que la solution est du coté de WaitForSingleObject ou de SleepConditionVariableCS mais je ne sais pas comment utiliser ces fonctions pour remplacer proprement ma vilaine boucle while et le Sleep.

#define TIMEOUT 5000

class Game: public IAsync
{

private :

volatile BOOL m_bRunning;
Engine* m_pEngine;

public :

Game( );
~Game( );

BOOL Run( );
VOID Invoke( IResult* pResult ); // IAsync methode.
};

BOOL Game::Run( )
{
m_pEngine->Run( ); // Methode asynchrone qui va appeler la methode Invoke.

// Ici je voudrais attendre le passage de m_bRunning à TRUE.

DWORD dwTime = timeGetTime( );
while( ( timeGetTime( ) - dwTime ) < TIMEOUT )
{
if ( m_bRunning )
{
break;
}

Sleep( 0 ); // !!!
}

return m_bRunning;
}

VOID Game::Invoke( IResult* pResult )
{
// ...

m_bRunning = TRUE;
}
jeudi 24 février 2011 à 11:42:27 | Re : Synchronisation de threads (Vista/Win7)
jeudi 24 février 2011 à 11:51:51 | Re : Synchronisation de threads (Vista/Win7)

Lucky92

Réponse acceptée !
Salut,

Tu peux utiliser un "event" en lieu et place du flag m_bRunning.

Tu ajoutes le membre suivant dans ta classe :
Code C/C++ :
HANDLE m_event ;


Dans le constructeur, tu initialises l'"event" :
Code C/C++ :
m_event = CreateEvent( 0 , FALSE , FALSE , 0 ) ;


Dans la méthode Run() tu attends que l'"event" soit levé :
Code C/C++ :
WaitForSingleObject( m_event , INFINITE ) ;


Et à la fin de la méthode Invoke(), tu lèves l'"event", ce qui débloqueras le WaitForSingleObject() :
Code C/C++ :
SetEvent( m_event ) ;


Cordialement.
vendredi 25 février 2011 à 04:14:29 | Re : Synchronisation de threads (Vista/Win7)

Lutinore

Administrateur CodeS-SourceS
Merci c'est très clair, je ne sais pas pourquoi je pensais que les "wait handles" étaient associés à un delegate, un pointeur de fonction mais non pas du tout et donc ça fonctionne parfaitement dans mon cas.


Cette discussion est classée dans : run, bool, threads, game, brunning


Répondre à ce message

Sujets en rapport avec ce message

Visual C++ 6.0 [ par acsx ] Salut,Comment déterminer quel type de use run-time library il faut utiliser dans un projet visual C++? (Project/Settings/C/C++/Code Generation/Use run Threads HELP ME PLEASE [ par loicus ] heu, j'aimerais pouvoir utiliser les threads dans mon programme afin de pouvoir lancer plusieur fonction en parallele..., Mais je n'y comprend rien... Help (threads) [ par loicus ] Bon, bhen voila.. j'essaye de faire un threadj'aimerais ouvrir la fonctions LCD_BootScreen() dans un thread, donc j'utilise cette fonction :thboot= Cr Help (threads) [ par loicus ] Bon, bhen voila.. j'essaye de faire un threadj'aimerais ouvrir la fonctions LCD_BootScreen() dans un thread, donc j'utilise cette fonction :thboot= Cr Threads et heap privé [ par mzhunix ] Salut à tous,je crée un heap privé "hHeapPrivate" dans le thread principale avec HeapCreate j'alloue quelques pointeurs dessus puis je crée un autre t Pipe Game ? [ par loicus ] J'ai absolument besoin de votre aide,Je recherche le code source d'un pipe game (jeu ou il faut construire une tuyauterie au fur et a mesur que l'eau CopyFile en C !!! [ par Zillah ] J'ai trouvé aussi des référence à cette fonction, mais comment l'appliqué ??? Je suis vraiment intrigué. J'avais besoin au départ de seulement un moye sérialisation d'un bool ou un type enum [ par iznogoud ] Bonjour,J'ai un petit problème lorsque j'utilise ma fonction serialize. Je suis incapble de rentrer des types bool ou des types que j'ai créer. Je sai AIDEZZZZZZ MOIIIII SVP SUR TABELAU JAI UN GROS PB!!! [ par retaks666 ] alors jiamerais faire une fonction ki decale les éléments d'u ntableau de une case, je suis en vcpp++6 et sous windows, voici la source: void CMultiGa timer dans des threads [ par z3bul0n ] Comment faire pour gérer un SetTimer créé dans un thread sans utiliser de fonction : j'aimerai recevoir le WM_TIMER à chaque fois qu'il y en a un dans


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales