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

epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 21 mars 2011 à 23:16 - Dernière réponse : epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention
- 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

Répondre au sujet
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 22 mars 2011 à 10:54
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Renfield
epineurien 83 Messages postés samedi 21 mai 2005Date d'inscription 22 mars 2011 Dernière intervention - 22 mars 2011 à 19:16
0
Utile
*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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.