Zootella
Messages postés252Date d'inscriptionvendredi 10 juin 2005StatutMembreDernière intervention 5 septembre 2006
-
7 oct. 2005 à 15:14
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 2023
-
3 mai 2009 à 13:54
Salut
Voila j'ai fait une passerelle reseau, elle connecte les clients aux serveurs qu'ils veulent.
Tout marche bien, mais le programme utilise 99% du processeur d'aprés
le gestionnaire des tâches, logique puisqu'il y'a une boucle while
infinie qui verifie si un client tente de de connecter ou si un
client/serveur envoie un message.
Donc c'est là que les threads rentrent en actions
Mais de quelle maniére les créer ?
Faut-il en créer juste un, qui lui va lancer la boucle while.
Faut-il créer un thread pour chaque client/serveur, donc chaque socket dans un thread.
Faut-il mettre le socket qui bind dans un thread.
Pas facile... le premier cas ne change rien : 99% du processeur
Donc d'aprés vous, quelle est la meilleur solution, y'a t'il d'autres solutions ?
gamemonde
Messages postés336Date d'inscriptionsamedi 9 août 2003StatutMembreDernière intervention 9 juillet 20112 7 oct. 2005 à 15:19
le premier c'est pour pouvoir toujours envoyer recevoir un message.
le deuxieme n'est pas bon vraiment car tu vas te retrouver avec trop de thread
le but est les thread, mais pour utilise select
regarde sur msnd
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 8 oct. 2005 à 09:43
Bonjour,
Très simplement en utilisant les bloquants. J'explique :
Tu lance la fonction qui connecte le client, intercepte et traite ses
messages mais dans cette fonction dès que le client s'est connecté tu
lui demande de relancer cette fonction en thread ainsi il peut
connecter un autre client tout en interceptant et en taitant à
l'identique les messages !
Zootella
Messages postés252Date d'inscriptionvendredi 10 juin 2005StatutMembreDernière intervention 5 septembre 2006 8 oct. 2005 à 14:57
Salut [auteurdetail.aspx?ID=89950 victorcoasne],
Effectivement avec des sockets bloquants, le processeur est à 0%.
Ta solution me paraît être la bonne
Mais quand tu dis :
"Tu lance la fonction qui connecte le client, intercepte et traite ses
messages mais dans cette fonction dès que le client s'est connecté tu
lui demande de relancer cette fonction en thread".
J'ai bien compris le principe, mais quelle fonction faut-il lancer dans le thread ?
Zootella
Messages postés252Date d'inscriptionvendredi 10 juin 2005StatutMembreDernière intervention 5 septembre 2006 8 oct. 2005 à 18:10
Je dois ajouter WaitForSingleObject(...) après la creation du thread
pour que ça "fonctionne" sinon mon thread reçois de mauvais données...
aussi les socket sont toujours bloqués.
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 3 mai 2009 à 13:54
Bonjour,
Les sockets sont une librairie de gestion réseau.
Bloquante c'est à dire synchrone, ça veut dire que la fonction bloque le thread (ou le programme si il n'a qu'un thread) durant la réception ou l'envoi des données.