Threads + Reseau

Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006 - 7 oct. 2005 à 15:14
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 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 ?



Merci

9 réponses

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
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
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
7 oct. 2005 à 21:22
Salut,

Les threads c'est la solution immediate aux problemes de sockets
bloquants, mais tu peux aussi utiliser les sockets non bloquants.
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
8 oct. 2005 à 01:16
Je n'utilise pas de socket bloquant, mais le processeur est utiliser à 99%, donc comment

remédier à ça proprement > sans utiliser sleep().
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
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 !



Merci,



Le créateur du site http://victorlogiciels.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Derniè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 ?
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Derniè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.
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
8 oct. 2005 à 22:18
Bonjour,



Une règle d'or c'est d'utiliser une déclaration de variable différente
pour chaque connexion et de le faire en thread avec une fonction
bloquante.



Caractéristique d'un thread:

Son prototype de fonction :

DWORD WINAPI lafonction(LPVOID parametre);



Son appel :

DWORD dword;

CreateThread(0,0,lafonction,(LPVOID)parametre,0,&dword);



Merci,



Le créateur du site http://victorlogiciels.com
0
younadim Messages postés 1 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 21:43
qu'est ce que savedire des sockets bloquants donnee des documentation
merci

 
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
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.

Pour avoir des informations sur son mode de fonctionnement voir mes sources.
Je te donne quand même le lien : http://www.cppfrance.com/codes/ENVOI-RECEPTION-FICHIERS-CLIENT-SERVEUR-DEV-CPLUSPLUS_41921.aspx

Merci et bonne prog,
@++

Victor
0
Rejoignez-nous