Multi-Threading : Thread ou Timer ?

Résolu
epineurien Messages postés 83 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 22 mars 2011 - 21 mars 2011 à 23:16
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
A voir également:

2 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mars 2011 à 10:54
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
3
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
*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.
0
Rejoignez-nous