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 :

Exécuter un morceau de code pendant un certain temps


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Par défaut Exécuter un morceau de code pendant un certain temps
    Bonjour !

    Je cherche désespérément à lancer un bout de code pendant un certain temps, par exemple je cherche un truc ressemblant à ceci :

    FAIRE maFonction() PENDANT I seconde

    J'ai trouvé ceic :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <time.h>
     
    void my_delay(int i)  
    {
        clock_t start,end;
        start=clock();
        while(((end=clock())-start)<=i*CLOCKS_PER_SEC);
    }
    Mais j'ai pas l'impression que cela va fonctionner.

    Merci !

  2. #2
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 23
    Par défaut
    Tu lance le bout de code sur un autre processus pour cela tu fork et tu met ton bout de code si le retour de fork == 0 puis dans le processus pere tu fais un sleep(1) et tu envois un SIGINT a ton processus fils. De cette maniere, un code s'executera dans un autre processus jusqu'a ce que le createur ( le processus pere ) lui envois un signal d'arret.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Plus simple, et en évitant le fork : alarm();

    Tu peux déclarer un flag par exemple, et armer sigalrm qui mettra le flag à 1 quand reçu. Tu testera le flag dans le code et si flag == 1, une seconde est passé.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Par défaut
    Mais en faisant cela, ça revient à faire un sleep(), une pause ... non ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TonyRony Voir le message
    Mais en faisant cela, ça revient à faire un sleep(), une pause ... non ?
    Lire la doc, parfois, ça aide..
    Un sleep() est différent d'un pause(), qui est différent d'un alarm().


    sleep() : sleep - delay for a specified amount of time
    pause() : pause - wait for signal
    alarm() : alarm - set an alarm clock for delivery of a signal
    sleep() permet d'effectué une temporisation d'un certain nombre de seconde. pause() permet de mettre le processus en attente d'un signal, n'importe lequel. alarm() indique à l'os qu'au bout d'un certain temps, il devra envoyer un processus le signal SIGALRM.

    Sleep et Pause sont bloquant.. Alarm ne l'est pas.

    En partant de cela, je te conseille d'utiliser alarm(). Au bout d'un temps que tu auras spécifié, le processus contenant alarm() recevra le signal SIGALRM envoyé par l'os. Il te suffit donc d'armer ce signal. Tu crées un flag... lorsque tu recevras le SIGALRM, il suffira de mettre à 1 le flag dans le handler..
    Dans le code de ta fonction, tu devras rajouter à chaque test si le flag est bien passé à 1. Si c'est le cas, la seconde sera passé et tu pourras sortir de ta fonction.

    ( Il y a une méthode bien plus... "crade", à base de goto dans le handler... Mais c'est à déconseiller. )

Discussions similaires

  1. Autorisation d'accès pendant un certain temps
    Par alex5512 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/03/2009, 11h55
  2. Comment afficher un message pendant un certain temps ?
    Par potili2 dans le forum Débuter
    Réponses: 4
    Dernier message: 16/01/2008, 11h08
  3. Afficher pendant un certain temps un popup menu
    Par dahu29 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 30/05/2006, 14h27
  4. [Thread] Invocation méthode pendant un certain temps
    Par the java lover dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 01/02/2006, 18h11

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