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

wxWidgets Discussion :

Comment faire une fonction périodique ?


Sujet :

wxWidgets

  1. #1
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut Comment faire une fonction périodique ?
    Bonjour,

    j'aimerai lancé une fonction périodiquement, genre toutes les 5 minutes.
    J'aurai voulu savoir si je devais faire forcément du multi process, ou si il y a moyen d'ajouter un timer dans la boucle d'execution de l'appli, ou une autre méthode.
    J'aimerai que la fonction ne ralentissement pas le reste de l'appli de préférence.

    quelqu'un a un exemple ou des infos sur ce sujet ?
    merki d'avance.

  2. #2
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Salut.

    Un timer (plus précisément un wxTimer) fera entièrement l'affaire pour lancer la fonction périodiquement.

    Ensuite, suivant le type de fonction, si tu ne veux pas que ça ralentisse l'application de base, il faudra sans doute passer par les threads (wxThreads).

    Si tu as besoin de plus d'infos, n'hésites pas.

    @+
    Xav'

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    [HS] Le mutli-process c'est lorsque le système est constitué de différentes applications (chaque process). Le multi-thread, c'est quand une même application possède plusieurs fils d'exécution. La différence principale entre les 2 tient de ce que les process ne partagent pas de zone mémoire en commun alors que les threads d'une même application peuvent adresser les mêmes zones mémoires. Désolé pour ce point de vocabulaire [/HS]

    Nul besoin de mettre en œuvre des mécanismes délicats comme le mutli-thread pour mettre en place un timer. La classe wxTimer est là pour toi !
    2 possibilités pour utiliser cette classe :
    1/ La spécialiser et faire ton traitement spécifique dans Notify :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // a la volée, donc ça ne compile peut être pas du premier coup...
    class MonTimer : private wxTimer
    {
    public :
       MonTimer(int periode_) : wxTimer()
       {
          Start(periode_);
       }
    private:
       virtual void Notify()
       {
          // Just do it...
       }
    };
    Ensuite, tu n'as plus qu'à créer une telle variable. Le timer a la même durée de vie que ta variable.

    2/ Utiliser un timer générique (de la classe wxTimer) et lui faire envoyer la notification au wxEventHandler de ton choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    // exemple ici avec un frame : 
    class MyFrame : public wxFrame
    {
    public:
        MyFrame();
    private:
       void OnTimer(wxTimerEvent&); // traitement de l'evenement
    private:
       wxTimer mon_timer; // timer
    private:
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(MyFrame, wxFrame)
       EVT_TIMER(wxID_ANY,OnTimer) // Ajout de l'evenement à la table d'evenement
    END_EVENT_TABLE()
     
    MyFrame::MyFrame(const wxString& title)
           : wxFrame(NULL, wxID_ANY, wxT("Timer Sample"))
           ,mon_timer(this) // on indique au timer qu'il faut générer un évènement à cette fenêtre
    {
       mon_timer.Start(2000); // on le démarre
    }
     
     
    void MyFrame::OnTimer(wxTimerEvent&)
    {
    // just do it !
    }
    A noter que wxWidgets précise que le timer doit être dans le thread principal pour Windows.

  4. #4
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    merci de vos réponses, ça fonctionne nickel

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

Discussions similaires

  1. [VBA-E] Comment faire une fonction utilsant une autre feuille
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 16h27
  2. Comment faire une fonction - procédure
    Par Madmac dans le forum C
    Réponses: 14
    Dernier message: 12/08/2006, 09h57
  3. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  4. [C#][Débutant] Comment faire une fonction FindWindow ?
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/04/2006, 13h19
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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