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

Réseau C Discussion :

Réaliser un Timer en C


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Réaliser un Timer en C
    Bonjour, je voudrais realiser un timer en C.
    Le but est de donner duree a l'execution d'un certain nombre de tâche, une fois la limite atteint on n'attend plus la fin de cette execution, on sort de cette execution.

    J'ai donc voulu réaliser un mécanisme de timeout en partant sur cette base:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            struct timeval T;
    	T.tv_sec=5;
    	T.tv_usec=0;
    Le probleme c'est comment faire pour lancer le timer?

    Car il y a un moment où je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(T.tv_sec==0)
    	{
             //codes...
            }

    Je ne sais si quelqu'un aurait une idee, 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
    tu as tout un thread avec l'exemple d'utilisation (et d'autres choses d'intérêt) ici-même :

    http://www.developpez.net/forums/sho...d.php?t=319576

    Bon courage

    "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 à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    merci
    mais d'apres ce que j'ai lu sur la discussion a laquelle tu me renvois, il y'a des soucis.
    souviron34
    Membre Expert

    Inscription: janvier 2007
    Localisation: Vers Béziers... Et Canada
    Âge: 49
    Messages: 1 162

    Par défaut
    Citation:
    fearyourself a écrit :
    Hmm cela me semble bizarre souviron34, serait-ce possible d'avoir un petit exemple qui affiche "Hello World\n" toutes les 5 secondes ?

    Jc
    oui c'est vrai que ça ne marche pas si tu es dans une opération qui occupe tout le CPU (exemple une boucle infinie).

    De plus, j'avais oublié un truc, le setitmet (que j'include quand même, même si le code n'est pas correct pour ce problème).
    __________________
    "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
    Mon processus est déjà un thread et c'est dans ce thread que je veux faire un timeout.

    Merci je regarde ton code.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par =o0 MOH =0o=
    Mon processus est déjà un thread et c'est dans ce thread que je veux faire un timeout.
    Quel système ?
    Il fait quoi le thread ?
    Un timeout sur quel genre d'évènement ?
    select() répond-il au besoin ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    C'est vrai que j'ai pas précisé:
    Citation Envoyé par Emmanuel Delahaye
    Quel système ?
    Il fait quoi le thread ?
    C'est une communication type socket entre un serveur windows(c#) et des clients linux(c). Chaque fois quun client se connecte un thread est créé coté serveur pour le traitement du client
    Un timeout sur quel genre d'évènement ?
    select() répond-il au besoin ?
    mon client linux envoi un message et attend la reponse du serveur, donc je veux
    paramétrer cette attente par un timeout coté client.

    Donc mon souci est de trouver un moyen de réaliser ce timeout, merci

  6. #6
    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
    OK mais tu l'effectues comment l'attente de la réponse ?

    Ce que voulais dire Emmanuel c'est utilises-tu select ?
    "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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par souviron34
    OK mais tu l'effectues comment l'attente de la réponse ?

    Ce que voulais dire Emmanuel c'est utilises-tu select ?
    Non je n'utilise pas select().
    Tout ce que je sais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
    c'est qu'il permet de vérifier des conditions (arrivée de données...) sur un ensemble de sockets bloquants.

    Peut être que je comprends mal mais est possible de lui passer juste un socket? (car pour moi à chaque nouveau client est associé un socket)

  8. #8
    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 =o0 MOH =0o=
    Non je n'utilise pas select().
    Tout ce que je sais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
    c'est qu'il permet de vérifier des conditions (arrivée de données...) sur un ensemble de sockets bloquants.

    Peut être que je comprends mal mais est possible de lui passer juste un socket? (car pour moi à chaque nouveau client est associé un socket)
    fd_set est comme son nom l'indique un ensemble de fd...

    Donc bien sûr tu peux lui passer un ensemble de descripteurs. Donc bien entendu l'ensemble peut être réduit à 1.

    Exemple :

    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
    31
    32
    33
     
       fd_set readfds;
       fd_set writefds;
       fd_set exceptfds;
     
       int nfound;
     
       /*
        * Verifier si on a une nouvelles requete
        * Methode:  on fait un select sur le descripteur du socket
        *
        */
     
     
       FD_ZERO(&readfds);
       FD_SET(srequete,&readfds);
       FD_ZERO(&writefds);
       FD_ZERO(&exceptfds);
     
       /* Note : srequete est le socket */
       nfound = select (srequete+1, &readfds, (fd_set *) NULL, (fd_set *) NULL, 
    		    (struct timeval *)NULL);
       switch (errno )
          {
    	case EINTR : fprintf (stderr, " ERREUR EINTR");
    	   break ;
    	case EBADF : fprintf (stderr, " ERREUR EBADF");
    	   break ;
    	case EINVAL : fprintf (stderr, " ERREUR EINVAL");
    	  break ;
    	default :
    	  break ;
          }
    [EDIT]

    Le timeout s'ajoute à la place de la structure timeval...

    [/EDIT]
    "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

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par =o0 MOH =0o=
    Non je n'utilise pas select().
    Tout ce que je sais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
    c'est qu'il permet de vérifier des conditions (arrivée de données...) sur un ensemble de sockets bloquants.

    Peut être que je comprends mal mais est possible de lui passer juste un socket? (car pour moi à chaque nouveau client est associé un socket)
    Oui, et il sert aussi à gérer les timeouts sur les évènements attendus sur les sockets.

    En principe, chaque client a son socket et son thread. Si tu ajoutes un select(), il a en plus son timeout...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci Emmanuel Delahaye et souviron34, je vais regarder ça.

    Je ne passe pas la discussion en résolu le temps de regarder le select().

    Merci c'est cool.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par =o0 MOH =0o=
    Je ne passe pas la discussion en résolu le temps de regarder le select().
    http://emmanuel-delahaye.developpez....aux.htm#select
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Réaliser un minuteur (timer)
    Par jorg1n dans le forum C
    Réponses: 2
    Dernier message: 23/12/2008, 01h58
  2. Réponses: 3
    Dernier message: 03/06/2008, 11h07
  3. réaliser un timer
    Par canary dans le forum Langage
    Réponses: 8
    Dernier message: 03/01/2008, 18h47
  4. Comment réaliser une horloge numérique grâce au timer 8254 ?
    Par jojo_ol76 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 29/03/2007, 20h56
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 23h22

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