IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

UDP multicast et traitement de donn�es


Sujet :

MFC

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par d�faut UDP multicast et traitement de donn�es
    Bonjour

    Je re�ois un flux important de donn�es en UDP multicast (toutes les 5 ms) et je dois les traiter rapidement.
    J'ai donc une CAsyncSocket pour la r�ception et la r�cup�ration des data dans le OnReceive.
    Je fais transiter la trame via un PostMessage (qui n'est pas bloquant) � une classe qui s'occupe du traitement.
    Or j'arrive � avoir des pertes de r�ceptions (j'ai contr�l� l'�mission pour �tre s�r).
    Pour moi, une CAsyncSocket est un thread et donc le message WM_RECEIVE est capt� quoi qu'il arrive, et l� ce n'est pas le cas.

    Pour info, j'ai mis mon traitement dans un thread.

    Est-ce que j'ai loup� quelque chose ?

    Merci d'avance.

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    J'ai v�rifi� dans les sources de MFC (2005):
    CAsyncSocket est juste un wrapper sur WSAAsyncSelect() utilisant une fen�tre globale au thread appelant (plut�t que prendre un HWND en param�tre).
    Et connaissant le fonctionnement de WSAAsyncSelect(), �a veut dire que le OnReceive() du CAsyncSocket est ex�cut� sur le thread appelant, et non sur un thread � part.

    Donc, si tu cr�es d�j� ton CAsyncSocket depuis ton thread UI, le PostMessage() est une perte de temps.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    En plus de la remarque de @M�dinoc, UDP n'est pas un protocole s�curis� en terme de perte de trame.
    Rien ne garantit qu'une trame �misse sera re�u par votre machine.
    Pour en �tre s�r, utilisez un sniffer r�seau type Wireshark sur votre machine cliente qui vous permettra de voir si au moins la stack IP du syst�me � bien r�ceptionner ces packets UDP.

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Rien ne garantit qu'une trame �misse sera re�u par votre machine.
    J'ai v�rifi� ce point avant en m'assurant de bien tout recevoir si je ne fais pas de traitement apr�s r�ception.

    Citation Envoy� par M�dinoc Voir le message
    Et connaissant le fonctionnement de WSAAsyncSelect(), �a veut dire que le OnReceive() du CAsyncSocket est ex�cut� sur le thread appelant, et non sur un thread � part.
    Est-ce que la solution serait d'utiliser les fonctions de base [socket, bind, select, read/readfrom, shutdown, closesocket] ?

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Citation Envoy� par coincoin73 Voir le message
    Est-ce que la solution serait d'utiliser les fonctions de base [socket, bind, select, read/readfrom, shutdown, closesocket] ?
    Si ton application est une application graphique, CAsyncSocket est appropri�. Mais il faut faire les Receive() le plus vite possible (quitte � faire la MaJ des contr�les la fen�tre plus tard avec un timer ou un truc du genre), pas les "remettre � demain" dans un contexte o� "demain" est mesur� en intervalles de 15.625ms.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par d�faut
    Est-ce que je n'ai pas int�r�t � faire du polling � la place du OnReceive ?

Discussions similaires

  1. [MySQL] PB traitement de donn�es !
    Par Tr@nkill dans le forum PHP & Base de donn�es
    R�ponses: 6
    Dernier message: 05/04/2006, 11h36
  2. [Formulaires] Traitement des donn�es dans une autre page...
    Par sekiryou dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 04/03/2006, 09h08
  3. R�ponses: 5
    Dernier message: 04/03/2006, 09h06
  4. traitement des donn�es avant envoie dans MySQL
    Par italiasky dans le forum SQL Proc�dural
    R�ponses: 13
    Dernier message: 07/02/2006, 22h50
  5. Programmation pour traitement de donn�es
    Par benbois dans le forum Langages de programmation
    R�ponses: 16
    Dernier message: 19/10/2005, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo