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 :

Generation d'evenements a une date precise


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    mai 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Generation d'evenements a une date precise
    Voila mon probleme.

    J'ai besoin pour mon appli de la chose suivante. Je suis a un instant t1. Je determine a t1 qu'une action doit se declencher a t2. Je voudrais que mon appli effectue bien l'action en question a t2.

    Voila. J'aurais egalement besoin d'au moins un parametre pour dire quel type d'action declencher a t2. J'ai besoin de declencher plusieurs types d'action.

    J'ai vu qu'il existait la methode CWnd::SetTimer mais je la trouve peu pratique. Elle genere regulierement un event WM_TIMER. J'ai besoin de quelquechose de plus souple.

    Si quelqu'un a une idee. Merci.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    mars 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Tu peux effectivement utilise des timers (dans le cas ou t2 est une periode et pas une heure fixe, c'est a dire, dans 10 minutes par exemple, et pas : a 15h37'43'').

    Pour ce qui est de SetTimer(), je vois pas le manque de souplesse que tu lui reproches. (c'est pas une remarque aggressive hein, qu'il n'y est pas de malentendu. C'est juste ... que je vois pas. Precise un peu plus ce que tu voudrais)

    SetTimer genere bien un WM_TIMER, mais tu peux aussi faire appel a une fonction CALLBACK a toi que t'as fait tout seul. C'est tres pratique, surtout si tu ne geres pas les events de Windows.
    Ca devient un peu plus complexe, syntaxiquement parlant, mais une fois que t'auras trouve la bonne facon de declarer tout ca, ca marche comme sur des roulettes.
    je vais te donner un exemple. Mais par contre, j'ai pas utiliser SetTimer, mais timeSetEvent(), qui est plus precis au niveau timer. Le systeme est presque la meme (mais la syntaxe est un peu differente quand meme).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timeSetEvent(  UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent );
    uDelay : le temps en millisecondes de ton timer.
    uResolution : mettre 0 pour etre ultra precis ou plus, pour l'etre moins (j'ai pas trop bien vu de differences ... a faire attention peut etre).
    lpTimeProc : la fonction CALLBACK appele a chaque uDelay.
    dwUser : si t'avais un parametre a passe a ta fonction CALLBACK, c'est la qu'il faut le mettre.
    fuEvent : les options de ton timer : TIME_ONESHOT si tu veux qu'il marche qu'une seule fois, TIME_PERIODIC si tu veux qu'il marche ... periodiquement. ( quelle perspicacite ! )

    Il faut pas oublier de faire un timeKillEvent(Id) de l'Id retourne par timeSetEvent() pour arreter le timer.

    Le plus galere, c'est de declarer ta fonction CALLBACK.
    Faut faire attention, elle ne doit pas etre membre d'une classe. En tout cas, je te le deconseille, car ca m'a fait une erreur qui m'a bloque pendant longtemps.
    Ta fonction DOIT etre declaree comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void CALLBACK fonctionCallBack( UINT Id,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2))
    T'es pas oblige de mettre de vrais parametres, c'est pas grave, mais il faut qu'ils soient tous la.
    tu peux mettre le code que tu veux executer dedans.

    Ensuite, voici comment tu fais appel a ton timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timeSetEvent( taDuree, 0, taFonctionCallback, 0, TIME_PERIODIC);
    tu ne dois pas mettre de parentheses pour ta fonction, car c'est son adresse que le timer recupere.

    Ch'ni p'tite astuce :
    Si tu veux utiliser l'instance de la classe qui lance le timer, tu peux la passer en parametre de ton timer comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timeSetEvent( taDuree, 0, taFonctionCallback, (DWORD) this, TIME_PERIODIC);
    Voila, si t'as toujours des problemes, re-post.
    Bonne prog.

  3. #3
    Futur Membre du Club
    Inscrit en
    mai 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Euh oui, ca a l'air tres bien en fait. Si j'arrive a faire fonctionner les fonctions callback, ca devrait etre OK. Et puis j'avais pas pense a utiliser le timer qu'une fois et pas regulierement.

    Je crois que je n'etais pas encore pret. Mais a present, je sens que la force est en moi.

    Merci maitre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Déclencher un evenement a une date donnée
    Par identifiant_bidon dans le forum AJAX
    Réponses: 2
    Dernier message: 06/01/2011, 00h15
  2. [MySQL] [trigger]lancer une page à une date precise
    Par sovo dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/09/2009, 10h21
  3. Réponses: 1
    Dernier message: 26/02/2009, 17h06
  4. Envoi e-mail automatiquement à une date precise
    Par sooprano dans le forum Langage
    Réponses: 10
    Dernier message: 23/11/2008, 21h03
  5. Max a une date precise mais doit retourner aussi si dernier
    Par cloche44 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/01/2007, 09h51

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