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 :

Mon timer n'est pas prioritaire !!


Sujet :

MFC

  1. #1
    Membre � l'essai
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5
    Par d�faut Mon timer n'est pas prioritaire !!
    Salut,

    J'ai lu les qq post qui parlaient de timer et j'ai donc mis en place un timer avec SetTimer(). Il me sert � envoyer � intervalle regulier un message � travers mon r�seau local depuis mon appli cliente vers un serveur situ� sur une autre machine et ce pour que le serveur sache en permanence que le client est toujours connect�.

    Le probleme s'est que mon timer est attach� � la fenetre principale de mon appli qui comporte une barre de menu. Le timer marche bien que je sois dans la fenetre principale ou dans une des fenetres filles. Mais si je reste dans un des menus de ma fenetre principale, le timer cesse de fonctionner (pas cool...)
    J'ai pu voir que le msg WM_TIMER �tait loin d'etre prioritaire et je suppose que tant que je n'ai pas fait mon choix dans le menu (genre Fichier>Ouvrir),, mon appli laisse mon WM_TIMER de cot� et se focalise sur d'autres messages....

    Est-ce qu qq'un aurait une id�e pour que le msg WM_TIMER devienne prioritaire et pour que mon appli puisse envoyer � son serveur les messages qu'il attend � intervalle r�gulier et ce quoique je fasse avec mon client ?

    Merci !

  2. #2
    mat.M
    Invit�(e)
    Par d�faut
    Il me sert � envoyer � intervalle regulier un message � travers mon r�seau local depuis mon appli cliente vers un serveur situ� sur une autre machine et ce pour que le serveur sache en permanence que le client est toujours connect�.
    Comme je le dirais tjs les TImers ne sont pas "fiables" parce que comme tu l'�cris , � intervalles r�guliers , il y a telle ou telle action qui est d�clench�e.
    Probl�me : � un instant t0 on d�clenche une action A qui dure un certain temps.
    A un instant t1 qui est le delta de temps avec t0 , qu'est-ce qui se passe si le traitement n'est pas termin� , ici en l'occurence une communication avec le r�seau ?
    L'�v�nement OnTimer � l'instant t1 relance l'action A....qui ne s'est pas termin�.

    Et qu'est-ce qui se passe s'il ya des latences cons�quentes sur le r�seau ? ( c.a.d. on "ping" mal )

    Donc vraisemblablement la solution peut passer par une programmation multiprocessus ou multithreading ....
    Sinon utiliser des EVENT ( CEvent avec MFC ) , sections critiques etc..

  3. #3
    Membre � l'essai
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5
    Par d�faut
    En fait dans le principe, si mon serveur ne re�oit pas de "message" de la part du client au bout d'une minute (le client envoyant un message toutes les 20s), il reinitialise la connection, donc pour les latences du r�seau ca devrait suffire.
    Mon souci �tait vraiment de comprendre pourquoi lorsque je rentrais dans un menu de mon IHM, ma fonction ::OnTimer n'�tais plus appel�e....

    En tout cas merci pour tes indications mat. Je pars donc � la decouverte des EVENT puis du multithreading si necessaire....

  4. #4
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Les messages WM_TIMER quand elles arrivent � intervalle de temps r�guliers, ils ne s'empilent pas dans la pompe � message. Si le delais est arriv� et que le message WM_TIMER n'a pas pu �tre traiter il est tout simplement d�truit. et dans ce cas l'intervalle double.

  5. #5
    Membre � l'essai
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5
    Par d�faut
    Je suis d'accord. Mais si je reste une heure avec mon menu ouvert, aucun WM_TIMER ne sera trait�.
    D�s que j'aurais fait un choix a travers mon menu ou referm� ce dernier, les WM_TIMER recommenceront � �tre trait� comme si de rien n'�tait.

    Donc si quelqu'un � une id�e de ce qui cause ce d�sagremment.....

  6. #6
    Membre confirm� Avatar de CriPpLe
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 157
    Par d�faut
    Si tu utilises le multithreading ya pas moyen d'arranger tout �a ?

  7. #7
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    regarde ce post sur codeguru qui implement un timer dans un thread separ�
    �a devrait resoudre ton pb :
    http://www.codeguru.com/Cpp/W-P/system/timers/article.php/c5753/

  8. #8
    Membre � l'essai
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5
    Par d�faut
    Je venais justement de tomber dessus !!

    Merci � tous, je vous tiens au courant...(mais pas ce soir...)

  9. #9
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par d�faut
    essaie avec un timer sans passer par WM_TIMER mais le pointeur de fonction. Il fonctionne beaucoup mieux, dans le sens plus fiable

  10. #10
    Membre � l'essai
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5
    Par d�faut
    Merci � tous pour vos indications, j'ai trouv� une classe sur codeguru qui a r�solu mon probleme ( un peu plus simple que celui indiqu� par farscape):

    http://www.codeguru.com/Cpp/misc/misc/timers/article.php/c341/


    ++

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [ADO.NET]Apparament mon delete n'est pas mis � jour.Quoi que?
    Par lrx94 dans le forum Acc�s aux donn�es
    R�ponses: 4
    Dernier message: 05/12/2006, 15h33
  2. R�ponses: 4
    Dernier message: 28/09/2006, 14h50
  3. [C# 2.0] Pourquoi mon DataAdapter n'est pas instancié ?
    Par FraktaL dans le forum Services Web
    R�ponses: 2
    Dernier message: 04/07/2006, 00h04
  4. Mon code n'est pas interpr�t� !
    Par korriganez dans le forum Langage
    R�ponses: 3
    Dernier message: 31/05/2006, 15h46
  5. Mon clonage n'est pas correct ?
    Par elitost dans le forum Langage
    R�ponses: 6
    Dernier message: 21/03/2006, 14h38

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