Lancement thread successif (ordonnés)

Signaler
Messages postés
130
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
8 juillet 2008
-
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Salut!
Voila, j'ai une question d'ordre propreté du code.
En fait, j'ai plusieurs thread, et j'aimerais pouvoir les lancés les un après les autres..je m'explique....
Chaque thread possède une initialisation, mais il faudrait que le thread 2 se lance une fois que le 1 a fini son initialisation, que le 3 commence après l'init du 2 etc....
J'ai pensé a une variable globale (système que j'utilise deja pour la fin), mais je voulais savoir si il y avait une methode "propre" vis a vis du code pour ce principe.

Je vous remercie pour vos reponses!!!

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
18
Une solution propre, fais un event avec CreateEvent(), tu pourras faire un WaitForSingleObject dessus, le signaler par SetEvent(), etc...

ciao...
BruNews, MVP VC++
Messages postés
15
Date d'inscription
vendredi 26 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2005

Salut,

Tu peux créer un objet file d'attente.
Messages postés
130
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
8 juillet 2008
1
J'ai essayer avec les events, mais sans succès a priori. Je dois mal m'y prendre.


Voila ce que j'ai:

HANDLE hGlobalWriteEvent;


DWORD WINAPI LaunchMainThread( LPVOID pParam )


{



bool l_bResult = SetEvent(hGlobalWriteEvent);



...


l_bResult = ResetEvent(hGlobalWriteEvent);



...



//Fin du thread


ExitThread(0);



return 0;
// thread completed successfully


}


DWORD WINAPI LaunchDecisionCheckingThread( LPVOID pParam )


{



WaitForSingleObject(hGlobalWriteEvent, INFINITE);



...



//Fin du thread


ExitThread(0);



return 0;
// thread completed successfully


}

Et dans la fonction principale, je met:


hGlobalWriteEvent = CreateEvent(NULL, TRUE, TRUE, "WriteEvent");
Avant de créer les thread...
Mais en fait, le waitfor singleobject n'attends pas..... Du coup, je sais pas koi faire.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
18
Func qui lance les threads:
hev = CreateEvent(0, 1, 0, 0); // MANUEL, NON SIGNALE
// lance 1er thread
WaitForSingleObject(hev, INFINITE); // ATTENTE SIGNALEMENT
ResetEvent(hev); // REMISE EN NON SIGNALE
// lance 2nd thread
WaitForSingleObject(hev, INFINITE); // ATTENTE SIGNALEMENT
ResetEvent(hev); // REMISE EN NON SIGNALE
etc....
CloseHandle(hev);

1er thread:
// fais ses inits
SetEvent(hev); // INFORME QUI ATTEND PAR SIGNALEMENT EVENT
// finit son boulot

autres threads idem.

ciao...
BruNews, MVP VC++