Synchronisation de beaucoup de processus avec les Event

Synchronisation de beaucoup de processus avec les Event - C - Programmation

Marsh Posté le 08-06-2006 à 18:10:55    

Bonjour
 
Je présente mon programme : il y a le thread principal, à un moment donné il créé un nouveau thread. Celui-ci entre dans un boucle ou il créé à chaque tour un nouveau thread du type PING, chacun chargé donc de faire un ping sur une machine différente.
J'ai essayé de de faire une variable globale "HANDLER thread_end".
Le thread principal, après avoir lancé le thread qui s'occupe de lancer à son tour la floppée de threads, entre dans une boucle en faisant un CreatEvent sur la variable thread_end puis entre en pause avec WaitForSingleObject.
J'espérais que chaque thread de PING, une fois terminé, fasse chaqu'un à son tour un SetEvent sur thread_end. Avec un compteur dans la boucle du thread principal, il serait possible de compter combien de threads PING ont terminés et une fois le nombre total atteind le thread principal se termine. Malheureusement ça ne fonctionne pas les threads PING se terminent, certains sont comptés mais d'autres non donc le thread principal attend de nouveau évènements alors que tout le monde a terminé... :(
 
Une idée pour m'aider avec tous ces threads qui n'en font qu'à leur tête? Merci :hello:  

Reply

Marsh Posté le 08-06-2006 à 18:10:55   

Reply

Marsh Posté le 08-06-2006 à 19:32:25    

tu peux utiliser les fonctions WaitForSingleObject et WaitForMultipleObjects directement sur le handle de tes threads.
 

Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. DWORD WINAPI Thread(LPVOID pParam)
  4. {
  5. Sleep((int)pParam * 1000);
  6. printf("Thread %d fini\n", (int)pParam);
  7. return 0;
  8. }
  9. int main(int argc, char* argv[])
  10. {
  11. HANDLE threads[5];
  12. int i;
  13. for(i=0; i<5; ++i)
  14.  threads[i] = CreateThread(NULL, 0, Thread, (LPVOID)i, 0, NULL);
  15. WaitForMultipleObjects(5, threads, TRUE, INFINITE);
  16. for(i=0; i<5; ++i)
  17.  CloseHandle(threads[i]);
  18. printf("Fin programme\n" );
  19. return 0;
  20. }


Message édité par SquiZZ le 08-06-2006 à 19:46:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed