Threads + Reseau

Signaler
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
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

Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
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
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Les threads c'est la solution immediate aux problemes de sockets
bloquants, mais tu peux aussi utiliser les sockets non bloquants.
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

Je n'utilise pas de socket bloquant, mais le processeur est utiliser à 99%, donc comment

remédier à ça proprement > sans utiliser sleep().
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
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
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

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 ?
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

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.
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
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
Messages postés
1
Date d'inscription
mardi 25 décembre 2007
Statut
Membre
Dernière intervention
2 mai 2009

qu'est ce que savedire des sockets bloquants donnee des documentation
merci

 
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
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