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

 C Discussion :

Obligé d'utiliser les threads pour faire un timer ?


Sujet :

C

  1. #1
    Membre régulier Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Points : 86
    Points
    86
    Par défaut Obligé d'utiliser les threads pour faire un timer ?
    Salut!

    J'ai besoin d'envoyer la meme commande à 1 seconde d'intervalle pendant environ 5 secondes.

    Je pensais faire une boucle for(i=0;i<5;i++) avec un sleep(1000) et ma commande à l'interieur.

    Sauf que c'est une fonction bloquante et que j'aimerai bien que mon programme continue a fonctionner pendant ce temps.

    Ma question est simple, est-on obligé d'utiliser les threads pour faire un timer non-bloquant ? N'y a t-il pas plus simple ?

    Merci!

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par theclem35 Voir le message
    Ma question est simple, est-on obligé d'utiliser les threads pour faire un timer non-bloquant ? N'y a t-il pas plus simple ?
    non on n'est pas obligé..

    Regarde les fonctions setitimer et alarm..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre régulier Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Points : 86
    Points
    86
    Par défaut
    Ok donc mettons, je peux faire une boucle for qui boucle 5 fois, avec à l'intérieur un SetTimer à 1s.
    Il suffit ensuite que je mette la commande que je veux executer dans un case WM_TIMER dans la fonction callback de ma fenetre ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    euh non..

    tu as ton programme qui se déroule.

    Au moment où tu veux déclencher ton truc, tu appelles une fonction qui déclenche le timer et revient..

    Quand le timer se déclenche, tu arrives dans la callback..

    Et il suffit que tu aies un compteur en global par exemple.. Tant que tu n'est pas arrivé à 5, tu ré-enclenches.. Sinon rien..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonsoir,

    Si tu n'as pas besoin d'une grande précision, tu peux utiliser la fonction time(). Elle retourne le nombre de secondes écoulées depuis le 1ier Janvier 1970 à 00:00:00.
    Il ne reste plus qu'à tester régulièrement ton temps.
    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
    int main(int argc, char *argv[])
    {   time_t timeoutWhile = 0 ;
        time_t timeSend = 0 ;
     
        timeoutWhile = time(NULL) + 5L ;  // Pendant 5 secondes
     
        printf("Start = %ld\n", time(NULL)) ;
        while(time(NULL)<timeoutWhile) {
            if(time(NULL)>timeSend) {
                timeSend = time(NULL) ;     // A la prochaine seconde
                printf("  Envoyer la commande à %ld sc\n", timeSend) ;
            }
     
            // Ici la suite de ton code
     
            usleep(20000) ;     // Laisser un peu de temps au proc (20ms).
        }
        printf("Stop = %ld\n", time(NULL)) ;
     
        return 0 ;
    }
    Note: time() à besoin de l'include <time.h>, et usleep() de l'include <unistd.h>
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  6. #6
    Membre régulier Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Points : 86
    Points
    86
    Par défaut
    impeccable

    merci beaucoup !

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

Discussions similaires

  1. [2008R2] Collation: Obligation d'utiliser les nvarchar pour le dialecte chinois?
    Par CHoule dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/05/2015, 17h14
  2. Utiliser les threads pour créer une fenêtre de LOG ?
    Par davidmarli dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2011, 15h01
  3. Insertion de mini cryptage pour un chat utilisant les Threads
    Par clawatin dans le forum Général Python
    Réponses: 30
    Dernier message: 03/06/2011, 18h06
  4. Utiliser les threads pour les traitements long
    Par rach375 dans le forum Websphere
    Réponses: 3
    Dernier message: 14/11/2006, 12h08
  5. Utilisation d'un thread pour faire une pause.
    Par ropabo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 11/06/2006, 14h28

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