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 :

Les timers : erreur de compilation


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut Les timers : erreur de compilation
    Bonjour,

    J'ai lu ce très bon tuto qui explique comment utiliser boost, et notamment la partie sur les timers asynchrones.

    J'ai cependant une exception lors de l'exécution du code donné dans l'article : could not convert calendar time to UTC time

    J'ai aussi essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::asio::deadline_timer t(io, boost::posix_time::seconds(boost::TIME_UTC + 5));
    mais ça ne marche pas non plus.

    J'ai lu ceci sur le net (y'a pas beaucoup de sites qui en parlent) :
    After some time traking the culprit, I got to the function
    time_type microsec_clock::create_time(time_converter converter) from the boost\date_time\microsec_time_clock.hpp header
    in which the variable 'std::time_t t' was strangely assuming a negative value, probably due to an overflow.

    Then I realized that changing the type of the variable 'micros' from uint64_t to std::time_t on that same function, could solve the problem.

    Mais s'il y avait une autre solution que d'aller bidouiller dans les fichiers de Boost ça m'arrangerais

    Avez-vous déjà eu ce problème ?

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bonjour,

    le code de l'article a été testé avec Visual Express 2008 et boost 1.37.
    Je viens également de le tester avec gcc 4.3.2 sous ubuntu et boost 1.38, et je n'ai aucun problème.
    Tu utilises quoi comme compilo / environnement ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    salut

    j'utilise Code Blocks, avec comme compilateur MinGw (et j'ai aussi Boost 1.38)

    Tu sais d'où ça peut venir ?

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    J'avoue ne pas avoir trop d'idée...
    Tu as quelle version de MingW?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    J'aurais tendance à dire 1.81-2 à la vue de ce fichier (readme.txt à la racine d'un dossier MinGw dans code blocks) :

    This folder contains the following components:

    gcc-core-3.4.5-20060117-1-vista.tar.gz
    gcc-g++-3.4.5-20060117-1-vista.tar.gz
    mingw-runtime-3.14.tar.gz
    mingw32-make-3.81-2.tar.gz
    mingw-utils-0.3.tar.gz
    w32api-3.11.tar.gz
    binutils-2.18.50-20080109.tar.gz
    gdb-6.7.50.20071127-mingw.tar.bz2

    These files were downloaded from http://www.mingw.org, direct links:
    http://downloads.sourceforge.net/min...1-vista.tar.gz
    http://downloads.sourceforge.net/min...1-vista.tar.gz
    http://downloads.sourceforge.net/min...me-3.14.tar.gz
    http://downloads.sourceforge.net/min...-3.81-2.tar.gz
    http://downloads.sourceforge.net/min...ils-0.3.tar.gz
    http://downloads.sourceforge.net/min...pi-3.11.tar.gz
    http://downloads.sourceforge.net/min...0080109.tar.gz
    http://downloads.sourceforge.net/min...-mingw.tar.bz2

    For more information please visit:
    http://www.mingw.org
    or:
    http://sourceforge.net/projects/mingw/
    ...for more (source code) downloads please visit:
    http://sourceforge.net/project/showf...?group_id=2435

  6. #6
    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
    Par défaut
    Salut,
    J'ai eu le même problème dans un autre contexte. Après investigation, il semblerait que gcc s'embrouille dans une optimisation. Le fichier incriminé dans boost est boost\date_time\filetime_functions.hpp.
    Les lignes problématiques sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            const uint64_t c1 = 27111902UL;
            const uint64_t c2 = 3577643008UL; // issues warning without 'UL'
            const uint64_t shift = (c1 << 32) + c2;
    Visiblement le décalage de c1 se fait sur 32 bits (d'ailleurs un warning est levé). J'ai modifié en ce sens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            const uint64_t c1 = 27111902ULL;
            const uint64_t c2 = 3577643008ULL; // issues warning without 'UL'
            const uint64_t shift = (c1 << 32) + c2;
    J'ai recompilé les bibliothèques (en l'occurence Boost.thread pour ce qui me concerne, mais ici, ce serait Boost.asio plus Boost.Date_time ). L'exception n'est alors plus levée (le calcul devient correct).

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    ok merci. Je regarderai ça. J'avais aussi trouvé une autre solution pour faire des timers, mais j'ai pas encore testé si on peut les utiliser pour interrompre une connexion socket

Discussions similaires

  1. Application d'opération sur les fractions : erreurs de compilation
    Par int828 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 10/10/2009, 14h09
  2. Réponses: 3
    Dernier message: 06/02/2009, 16h25
  3. Détecter et comprendre les erreurs de compilation
    Par Beowulf dans le forum FAQ LaTeX
    Réponses: 0
    Dernier message: 30/08/2007, 10h55
  4. [PL/SQL] voir toutes les erreurs à la compilation
    Par ciol2.6.12 dans le forum Oracle
    Réponses: 2
    Dernier message: 14/04/2006, 18h49
  5. question sur les erreurs de compilation
    Par vince3320 dans le forum C
    Réponses: 5
    Dernier message: 19/04/2004, 11h34

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