Thread et socket udp

eurysthe Messages postés 8 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 22 octobre 2004 - 22 janv. 2004 à 17:50
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 24 janv. 2004 à 08:39
Bonjour !!
Voila j'ai un petit problème de thread qui me pourrit la vie.
J'ai crée un thread qui doit écouter en boucle les informations qui transite sur un réseau avec le protocole UDP.
J'utilise la fonction recvfrom.
Le probleme c que cette fonction bloque le thread si rien n'est recu, en conséquend mon thread est bloqué en attente et je ne peux plus le killer....

comment faire ?? Merci :)

4 réponses

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
22 janv. 2004 à 19:33
Salut!!!
J'ai eu le même problème mais avec la fonction recv, je vais te donner ma soluce et j'éspère qu'elle marchera aussi pour toi...

Il faut utiliser la fonction select:

int nRetour;
fd_set fdsetRecv;
timeval attendre = {1, 0}; // {sec, nSec}
FD_ZERO(&fdsetRecv);
FD_SET(sock, &fdsetRecv); // on a un SOCKET nommé sock

// On attend pdt 1 sec pr voir si des infos sont en attente de lecture sur le SOCKET. Ca agit comme un sleep, le main est rendue aux autres threads
nRetour = select(FD_SETSIZE, &fdsetRecv, NULL, NULL, &attendre);

// si oui
if(nRetour > 0)
{
  // fais le recvfrom ici car des données demandent à etre lue
}

// ici verif de fin de thread


Voila, j'éspère que ca pourra t'aider.

@++

R@f
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
eurysthe Messages postés 8 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 22 octobre 2004
23 janv. 2004 à 07:33
Je te remercie c cool..
je vais essayer ta solution et voir si elle fonctionne.
Que c plaisant d'avoir un petit coup de main venant d l'exterieur..

Je te tiens au courant
0
eurysthe Messages postés 8 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 22 octobre 2004
23 janv. 2004 à 07:35
Tiens en relisant je vois que ce n'est pas tres bon ..
Le pb c que g besoin de faire transiter des infos tres rapidement pour faire du temps réel... 1 seconde d'attende c une éternité..
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
24 janv. 2004 à 08:39
Salut!!!

1) Lors de l'intialisation de attendre, tu met ce que tu veux comme valeur en sachant que le premier param est des secondes et le deuxième des "micro"secondes. Plus le temps d'attente est petit, plus ton code utilisera des resources.

2) Je viens de vérifier, select est compatible avec recvfrom

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
Rejoignez-nous