Multi-Threading : Thread ou Timer ? [Résolu]

Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
- - Dernière réponse : epineurien
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
- 22 mars 2011 à 19:16
Bonjour,

Je m'amuse actuellement à essayer de développer un prototype de MMO. J'ai cependant un problème concernant l'utilisation du multi-threading pour les différentes tâches du serveur.

A la base, j'utilisai l'approche "classique" à base de :
  Service_Connection = new Thread(ServiceConnection);

Avec ma fonction "ServiceConnection" contenant une boucle infinie répétant en boucle les opérations d'acceptations d'une nouvelle connection.

Le problème est qu'avec la multiplication des "services" (enfin juste avec 7), mon PC rame à mort au point de ne même plus arrivé à afficher les composants du Windows Form qui me sert d'interface serveur.

J'ai donc changé pour une approche "Timer", en virant la boucle infinie dans mes fonctions (puisque le Service est rappelé en permanence par le Timer) :
System.Threading.Timer Service_Connection = new System.Threading.Timer(ServiceConnection, 0, 0, 1);

Et là bizarrement ça ne rame plus du tout, même avec un intervalle de 1ms pour chacun des 7 "Services".

Bref ça me semble trop beau
Suis-je en train de me planté complétement avec les Threading.Timers ?
Me suis-je planté avec les Threads "basiques" ?
Merci de vos réponses / conseils
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
53
3
Merci
boucle infinie, oui, si tu ajoutes au moins un

Thread.Sleep(0);

histoire de permettre a Windows de redonner la main aux autre threads et processus

c'est ce que simule le Timer, relachant le processeur pendant quelques millisecondes

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 139 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
0
Merci
*Teste*
Ah oui effectivement ... ca redevient "jouable" en insérant un Sleep(0). Merci de l'astuce, c'est franchement un truc auquel je n'aurais jamais pensé

Je pense finalement rester sur l'approche "Thread.Timer" : de ce que je lit sur internet, ça semble plus adapté pour un serveur multi-thread.
Commenter la réponse de epineurien