MoDDiB
Messages postés546Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention 4 mai 2007
-
19 oct. 2003 à 11:41
valantino1
Messages postés12Date d'inscriptionjeudi 19 novembre 2009StatutMembreDernière intervention 1 décembre 2010
-
9 févr. 2010 à 11:37
Une ame charitable pourrait-elle faire une source ou le client tout comme le server puisse traiter des info normalment tout en pouvant en meme temps recevoir des donnés de l'autre utilisateur(et accepter des connex mais bon c optionnels :p) ..
On m'a donné des sites de multithread y a un moment mais les tut était down et c'est vraiment dur de trouver ca sur le net..
O pire un lien vers des tuts multithread ki marche serait sympatik ^^
Je crsoi que ca pourrais aider pas mal de gens ici comme moi !
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 19 oct. 2003 à 17:19
le multithread est une chose a éviter lorsqu'on veut un serveur multiclient, vo mieu utilisé la fonction select (2eme lien ke g mis)
La premiere source est threadé et permet de faire 2 choses en même tps (la gestion des donné envoyé par socket + ce que tu veu). Ca te permetra de faire tt ce que tu veu en tps normal et t'apprenddre a te servir d'un thread si tu regarde bien le code
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 28 oct. 2003 à 04:02
Salut,
Dans le cas de la recherche de performance, autant oublier ces 2 modeles: le multithread consomme trop de ressources systeme, et select() c'est pratique surtout quand on veut faire des trucs portables.
Sous win, il existe d'autres modeles bcp plus performants, comme WSAAsyncSelect, WSAEventSelect, et j'en oublie.
Vous n’avez pas trouvé la réponse que vous recherchez ?
valantino1
Messages postés12Date d'inscriptionjeudi 19 novembre 2009StatutMembreDernière intervention 1 décembre 2010 9 févr. 2010 à 11:37
Bonjour tr le monde ,
en faite je suis entrain de programmer une ptite application multithread qui envoie des sockets à des @ IP(10 @ en simultané) et selon le retour de select de socket il decode l'entete(IpHeader) et revoi le resultat ; si on teste la select avec un seul poste en simultané il marche trés biens alors que lorsque je tente de le testé avec plus que de 2 en simultanés la select retourne toujours 1 = sig que la select contient des donnees alors ce n est pas le cas ! (car ces adresses IP ne sont pas connectés ) !
voila un extrait de code :
// Initialisation du nombre de ping à faire = nombre de retrait
if(iNBPing == 0)
iNBPing = NBPINGDEFAULT;//si le nombre de retarit est a 0 on prend le nombre par default 1.
// Initialisation du délai d'attente
if(iTpsLimite == 0)
iTpsLimite = DEFALUTTIMEOUT;//si le delai d'attente est 0 on prend le timeout par defaut 1000 MS
while((CHote->iNbRetryUsed != iNBPing)&&(!bRstConn))
{
memset(szICMP_data,0,DATASIZE_ICMP);
iID = (unsigned short)GetCurrentProcessId() + CHote->iNbRetryUsed;
// Construction du paquet ICMP
IcmpHeader *icmp_hdr;
icmp_hdr = (IcmpHeader*)szICMP_data;
icmp_hdr->type = TYPE_ICMP_ECHO; // Type du paquet ICMP : echo request
icmp_hdr->code = CODE_ICMP_NULL; // Il n'y a pas de code spécifique pour ce type de paquet
icmp_hdr->id = iID;//identificateur de paquet
icmp_hdr->sequence = SEQU_ICMP_ECHO;
icmp_hdr->timestamp = GetTickCount(); // Initialisation du temps lors de l'envoi
// Somme de contrôle sur 16 bits
((IcmpHeader*)szICMP_data)->checksum = checksum((unsigned short*)szICMP_data, DATASIZE_ICMP);
// On envoie le paquet ICMP que l'on a construit
iEnvoi = sendto(sock, szICMP_data, DATASIZE_ICMP, 0, (struct sockaddr *)&sin, DATASIZE_ICMP);
FD_ZERO(&fdsr);
FD_SET(sock, &fdsr);
do{
if (select(sock+1, &fdsr, NULL, NULL, &tv_timeout) <= 0)
{
// Dans le cas où le temps est écoulé, on veut sortir de la boucle
// on compte le paquet comme envoyé mais perdu
// delai d'attente de la demande depassée
CHote->iNbRetryUsed = CHote->iNbRetryUsed+1;
iPerte= iPerte+1;
iFindelai = 1;
}
//Cette fonction vérifie si le descripteur "sock" est contenu dans l'ensemble "fdsr" après l'appel à select.
if (FD_ISSET(sock, &fdsr))
{
// Dans le cas où le buffer du socket contient des données,
// on les décode
iRecept=recvfrom(sock, szRecvbuf, MAX_PACKET, 0, (struct sockaddr *)&from, &iFromlen);
memset(szRecvbuf,0,MAX_PACKET);
//dés la prmiere ping : si on a l'envoi est supérieur de perte on sort
if((CHote->iNbRetryUsed-iPerte)>0)
bRstConn=true;