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 :

Création du timer dans une Dll


Sujet :

MFC

  1. #1
    Membre du Club Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Points : 67
    Points
    67
    Par défaut Création du timer dans une Dll
    Salut à tous,

    Je suis en train d'essayer de créer un timer dans une Dll,mais je bloque .

    Je développe sous Embedded VC++ 4 et j'ai créé une Dll de type "EmptyProject".

    Pour tenter de faire un Timer, j'utilise la fonction SetTimer comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    extern"C" int WINAPI LancerTimer(int Frequence)
    {
    	res = ::SetTimer(NULL, 1, Frequence, NULL);
     
    	return res; 
    }
    Le problème c'est que je ne sais pas comment appeler la fonction OnTimer, dans laquelle j'aimerais indiquer ce que je veu faire dans ce Timer. Car elle n'existe pas dans le 'global space' comme me le dit le compilateur.

    Si vous avez une idée la dessus n'hésitez pas

    A noter aussi qu'il est possible d'invoquer la fonction KillTimer de la même manière qu'avec la fonction SetTimer.

    Merci.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    salut,

    il te faut une callback en static

    ou alors, une autre solution est d'utiliser timeSetEvent

  3. #3
    Membre du Club Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Points : 67
    Points
    67
    Par défaut
    Désolé de ne pas répondre plus tôt, mais merci de m'aider

    Sinon, qu'es-ce qu'une CallBack en static ? et comment je pourrais l'utiliser, j'ai regardé dans l'aide de visual, mais je ne trouve rien qui ne parle d'un timer.

    Pour ce qui est du TimeSetEvent, j'ai l'impression que l'embedded visual C++4 ne la connait pas.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il te faut une fonction du type timerProc http://msdn.microsoft.com/library/de.../timerproc.asp, définie en static, donc avec le mot clé static

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Oui il faut faire une fonction CALLBACK mais c'est fortement déconseillé de faire un timer dans une dll !
    Une dll n'est pas faite pour ça ,c est une erreur; une dll c'est fait pour encapsuler du code commun à plusieurs applications.
    Là ou c'est une erreur de procéder c'est qu'une dll n'a pas de gestion de message comme la classe d'une fenêtre ( classe au sens API Windows , WNDCLASS et non C++).
    Un timer c'est gérer dans la boucle de message d'une fenêtre pas d'un composant externe.

  6. #6
    Membre du Club Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Points : 67
    Points
    67
    Par défaut
    Dans ce cas, comment faut il faire pour répéter une action toutes les 'n' secondes sans utiliser de timer ?

    D'un autre côté l'utilisation de timer n'est pas exclusivement faite pour la gestion de message comme une classe fenêtre, en effet, on peu très bien en retrouver dans des gestions d'interruptions en programmation bas niveau pour cartes électroniques.

  7. #7
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    Dans ce cas, comment faut il faire pour répéter une action toutes les 'n' secondes sans utiliser de timer ?
    C'est plutôt à la partie cliente de la DLL d'invoquer ce code de manière périodique.
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  8. #8
    Membre du Club Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Points : 67
    Points
    67
    Par défaut
    Il m'est malheureusement imposé de ne pas le faire comme tel

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    mais pourquoi veux-tu te passer de timer ? on peut le faire avec un timer

  10. #10
    Membre du Club Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Points : 67
    Points
    67
    Par défaut
    Personnelement je voudrais bien le faire avec un timer

    Mais je ne comprend pas comment lier la fonction SetTimer, avec la fonction CALLBACK.

    Pourrais tu m'aider la dessus ?

    Merci.

  11. #11
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Hokagge
    Il m'est malheureusement imposé de ne pas le faire comme tel
    comme l'indique BertrandA c'est la partie cliente qui doit gérer cela.
    Pq faut-il mettre un timer dans la DLL ?

    C'est impossible car contrairement à une appli cliente fenêtrée GUI une dll ne reçoit pas de messages de l'OS , n'est pas "Scheduled"
    Tu peux utiliser SetTimer et capter WM_TIMER mais la dll ne recevra jamais WM_TIMER.
    Sinon utiliser timeGetTime() et calculer le delta de temps pour effectuer des actions

  12. #12
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Puisque la DLL ne possède pas de pompe à message, qu'il exécute son timer dans un thread de son appli cliente.

  13. #13
    Membre du Club Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Points : 67
    Points
    67
    Par défaut
    Ok, je crois que je vais m'otienter vers un thred, mais est-ce que je peu mettre un thread dans une Dll ?

    (désolé d'être chia*t, mais je ne peu vraiment pas mettre de timer ou autre thread dans l'appli cliente cahier des charges oblige )

  14. #14
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Hokagge
    Ok, je crois que je vais m'otienter vers un thred, mais est-ce que je peu mettre un thread dans une Dll ?

    (désolé d'être chia*t, mais je ne peu vraiment pas mettre de timer ou autre thread dans l'appli cliente cahier des charges oblige )
    Avant de passer à la programmation d'un thread ce qui est parfaitement possible , je le répète utiliser timeGettime c'est plus simple.

    Sinon il ya aussi les EVENT

Discussions similaires

  1. Problème de survol en création d'objet dans une DLL
    Par KlausGunther dans le forum Composants VCL
    Réponses: 20
    Dernier message: 07/01/2015, 12h19
  2. Réponses: 8
    Dernier message: 20/06/2008, 09h00
  3. Timer ou OnIdle dans une DLL
    Par oliver_mpt dans le forum C
    Réponses: 1
    Dernier message: 05/06/2008, 21h11
  4. Creer un composant non visuel(Timer) dans une DLL
    Par hugobob dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/06/2006, 16h20
  5. Réponses: 4
    Dernier message: 16/05/2006, 23h15

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