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

Signaler
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
-
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
-
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

2 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
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
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

*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.