Lancement thread successif (ordonnés)

themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 - 19 sept. 2005 à 09:58
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 sept. 2005 à 17:47
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

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

ciao...
BruNews, MVP VC++
0
cs_dofdof Messages postés 15 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 19 septembre 2005
19 sept. 2005 à 11:46
Salut,

Tu peux créer un objet file d'attente.
0
themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 2
19 sept. 2005 à 17:28
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 sept. 2005 à 17:47
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++
0
Rejoignez-nous