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

Caml Discussion :

Unix.sleep comportement bizarre ?


Sujet :

Caml

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut Unix.sleep comportement bizarre ?
    Bonjour.

    Peut-on m'expliquer pourquoi aucun message ne s'affiche jamais avec un programme aussi simple que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    open Unix;;
     
    while true do
      print_string ("Hahahahaha\n");
      Unix.sleep 1;
      print_string ("OOOOOOOO\n");
    done;;
    Le but étant d'endormir un programme pendant 15 secondes puis de reboucler et reprendre l'exécution (ici le sommeil est d'une seconde).

  2. #2
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Flushe la sortie standard après avoir imprimé, sinon tout est tamponné et en l'occurrence, ne s'affiche que quand tu coupes ton programme. La fonction flush du module Pervasives est ton amie
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Effectivement, flush stdout a été la solution.

    Et si dans ma boucle, je fais plein d'instructions comme des itérations sur les listes, des ajout dans une base de données SQL, faudra t-il que je flush ou bien là, c'était uniquement une histoire de tempon parce que je voulais imprimer quelque chose ?

  4. #4
    alex_pi
    Invité(e)
    Par défaut
    Seules les entrées sorties sont mises en tampon, les instructions sont bien sur effectuée immediatement !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Salut. Je reviens à la charge pour le problème du sleep.

    Je fais dormir mon programme toutes les 15 secondes mais à son réveil, il n'exécute pas ce qu'il est sensé faire. Pour rentrer plus dans le détail, je lance une commande système qui va créer des fichiers puis parser les fichiers, ce qui va générer une liste et enfin je travaille sur la liste.

    Certains éléments de la liste sont alors stockés dans une base de données SQL. Mais le programme commence à faire ces tâches uniquement après plusieurs tours de boucles. Je suppose que c'est encore un problème de buffer mais je ne sais pas exactement où. Pour ce qui est des print_string, je fais bien le Pervasives.flush stdout mais dois-je le faire également quand j'ouvre un flux pour les fichiers ?

    Il y a aussi un autre fonctionnement bizarre. A chaque tour de boucle, le programme regarde s'il s'est passé un évènement. Si oui, il fait une action et se rendort, sinon il se rendort tout de suite. Dans le cas où le programme détecte l'évènement tout de suite, le programme fonctionne correctement après chaque tour de boucle.

    En clair, voici les 2 comportements :

    - Lancement Programme
    - Détection de l'évènement
    - je lance l'action
    - je me rendors
    - et je continue comme ça. Ceci est le comportement normal.

    Comportement n°2:
    - Lancement programme
    - Aucun évènement
    - Se rendors
    - Ne fera plus rien avant une tripoté de temps

    Si vous souhaitez consulter les sources: http://bellier.no-ip.org/repwatcher
    Le sleep est dans le fichier main.ml

Discussions similaires

  1. Comportement bizarre de mes FPS
    Par Ekinoks dans le forum OpenGL
    Réponses: 7
    Dernier message: 22/08/2005, 15h14
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 10h39

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