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

Boost C++ Discussion :

boost::thread, sleep et changement d'heure


Sujet :

Boost C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 10
    Points
    10
    Par défaut boost::thread, sleep et changement d'heure
    Bonjour,

    (Topic d'origine : http://www.developpez.net/forums/sho...d.php?t=486240)

    Je me trouve devant un problème de gestion de threads. En effet, j'ai une application (Linux) qui voudrait changer l'heure système. Or ce programme contient plusieurs boost::threads qui sont en pseudo-veille via les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    bool bQuit = false;
    boost::thread t;
    boost::xtime xt;
    while(!bQuit)
    {
    	{
    		// des choses
    	}
    	xtime_get(&xt, boost::TIME_UTC);
    	xt.nsec += 20000;
    	t.sleep(xt);
    }
    Or, que j'utilise les fonctions settimeofday();, system("date -s ..."); ou que je change l'heure dans le système via le gestionnaire, j'obtiens (et c'est logique), un blocage du sleep quand je mets une heure antérieure.

    Je voulais savoir s'il existait, dans la bibliothèque boost::thread:: xtime ou dans boost::date_time, des fonctions pour mettre à jour l'heure système sans mettre en péril l'application threadée ?

    ou alors existe-t-il un autre moyen de faire dormir mon thread, qui ne prendrait pas en compte l'heure actuelle, mais une sorte de timer... ?

    Merci !

    EDIT : en attendant, je fais un usleep(20000); ce qui n'est pas très propre vis-à-vis de boost, mais au moins ça bloque pas.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    en utilisant autre chose que boost::TIME_UTC comme horloge de référence?

    jette un coup d'oeil ici peut être:
    http://www.cl.cam.ac.uk/~mgk25/time/c/

    regarde si elles sont implémentées dans boost

    ( TIME_TAI, TIME_MONOTONIC, TIME_PROCESS, TIME_THREAD,
    TIME_LOCAL, TIME_SYNC, TIME_RESOLUTION )

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    "The only clock type supported by Boost.Thread is TIME_UTC"

    err.. je regarde le code dans boost:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    enum xtime_clock_types
    {
        TIME_UTC=1
    //    TIME_TAI,
    //    TIME_MONOTONIC,
    //    TIME_PROCESS,
    //    TIME_THREAD,
    //    TIME_LOCAL,
    //    TIME_SYNC,
    //    TIME_RESOLUTION
    };
    bon ben ça va pas t'aider.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci tout de même de t'être penché sur mon problème. Mais c'est sur que ça aurait pu être la solution.

    Je vais regarder profondément la doc sur la bibliothèque boost::date_time voir s'il y a des fonctions thread_safe ou qui notifierait les threads du changement d'heure.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Tu as essayé d'utiliser le sleep système ?

    MAT.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Tu as essayé d'utiliser le sleep système ?

    MAT.
    Citation Envoyé par lebaste77 Voir le message
    EDIT : en attendant, je fais un usleep(20000); ce qui n'est pas très propre vis-à-vis de boost, mais au moins ça bloque pas.
    Si c'est de ça que tu parles, alors oui. Mais ça fonctionne moins bien, j'ai l'impression que ça rame un peu plus...

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Ah oui c'est à ça que je pensais (à son cousin sleep en fait).
    Tu peux faire un sleep( 20 ) au lieu d'un usleep( 20000 ) mais ça ne va sans doute pas changer grand chose...

    En fait c'est pas illogique du côté de Boost.Thread puisque le sleep prend comme argument une date de fin.

    MAT.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    euh, non, sleep(20) attend 20 secondes, alors que usleep(20000) attend 20 ms...

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Il est vrai....

    MAT.

Discussions similaires

  1. boost::thread et OpenGL
    Par Kurisu dans le forum Boost
    Réponses: 12
    Dernier message: 19/09/2006, 13h23
  2. [Prbl] Thread(image ne s'affichant pas avant le thread.sleep
    Par stephane92400 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 26/06/2006, 11h57
  3. [Thread] PB Thread.sleep(1000) marche pas
    Par kliel dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 03/12/2004, 13h47
  4. [Thread]sleep()
    Par jokoss dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 03/07/2004, 14h33

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