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

Langage Perl Discussion :

[langage] alarm( MILLISECONDES ?????)


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 22
    Points : 18
    Points
    18
    Par défaut [langage] alarm( MILLISECONDES ?????)
    Hello les pros...

    G besoin de vous..
    J'aimerais savoir comment faire pour envoyer des signaux avec alarm(), mais avec un temps inférieur à 1 seconde.
    J'ai essayé ce que j'ai pu avec la fonction select, mais sans succes.. (Pardon, je suis sous Windows..)


    Merci d'avance...

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le mieux, c'est d'utiliser le module (qui est fourni avec la 5.8 d'ActiveState en standard, et probablement avec la 5.8 officielle) Time::HiRes, ce module t'offrira une fonction ualarm() qui permet de spécifier des temps en microsecondes. (Encore faut-il que ton système le permette, mais je pense que c'est le cas de Windows)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 22
    Points : 18
    Points
    18
    Par défaut fonctionne pas
    Ca ne fonctionne pas, voici le message qu'il me met :


    Your vendor has not defined Time::HiRes macro ualarm, used at logAlert.pl

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Oui, en effet, j'ai le même problème, peux tu me dire à quel usage tu destinais ce ualarm ? Peut-être pourrait t'on utiliser autre chose à la place. :

    (usleep marche très bien sur mon système par contre)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 22
    Points : 18
    Points
    18
    Par défaut barre de progression
    usleep marche tres bien aussi...

    Je pensais me servir de la fonction ularam pour créer une barre de progression à la façon du post précédent. Je désirais changer la rapidité de cette barre en changeant la fréquence d'envoi des alarmes..


    Merci

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Oui, c'est vrai qu'elle est très bien cette barre de progression
    Tu pourrais peut-être essayer de créer un thread (ou fork() ? mais c'est encore plus aléatoire je pense) pour la barre de progression ? En utilisant usleep dedans, tu pourrais ainsi avoir une progression plus rapide (mais peut-être irrégulière...). (Tu peux aussi fouiller dans les modules dévolus à la console sur le CPAN, par exemple ncurses et ses copains, peut-être offrent-t-ils des solutions toutes faites).

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Bon... Aaaarggg....
    Dur, dur...
    J'ai commencé par essayer pendant presque 2 h d'utiliser la structure des Threads tel que présentée dans l'ouvrage de référence 'Programmation en Perl', j'ai failli m'arracher les cheveux....
    Effectivement, cette interface a maintenant été supplanté par l'interface des ithreads dans la 5.8 (Programmation en Perl traite la 5.6), ce que j'ai pu constater dès que je me suis reporté aux pages de manuel....
    Et là, bien sûr, ça a marché du premier coup.....

    Enfin donc ça donne un truc comme ça :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    @echo off
    perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
    goto endofperl
    #!perl
    use Time::HiRes 'usleep';
    use threads 'yield';
    use threads::shared;
     
    $| = 1; #indispensable pour l'affichage de la barre
     
    {
        my $barre;
        my $fin : shared;
     
        sub lance_progression {
            $fin = 0;
            $barre = threads->create(\&barre);
        }
     
        sub barre {
            my $pos = 0;
            until($fin) {
                print (("-" x $pos) . "o" . ("-" x (19 - $pos)));
                $pos++; $pos %= 20;
                usleep 50000;
                print ((chr 8) x 20);
                yield;
            }
            return;
        }
     
        sub fin_progression {
            $fin = 1;
            $barre->join;
        }
    }
     
    sub data {
        my $result;
        for(1..1000000){
            $result = $_ + 2;
            yield;
        }
        print "\a";
        return $result;
    }
     
    lance_progression;
     
    my $result = data;
     
    fin_progression;
     
    print "\n$result\n";
     
    lance_progression;
     
    $result = data;
     
    fin_progression;
     
    print "\n$result\n";
     
     
    __END__
    :endofperl
    J'espère que ça pourra t'aider, au moins, le principe est là, et ça marche !

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Voilà une version un peu améliorée puisqu'elle supprime la barre de progression à la fin (par ailleurs j'en ai profité pour supprimer les parties du code précédent destiné à permettre de le lancer comme un '.bat') :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #!/usr/bin/perl
    use Time::HiRes 'usleep';
    use threads 'yield';
    use threads::shared;
     
    $| = 1; #indispensable pour l'affichage de la barre
     
    {
        my $barre;
        my $fin : shared;
     
        sub lance_progression {
            $fin = 0;
            $barre = threads->create(\&barre);
        }
     
        sub barre {
            my $pos = 0;
            until($fin) {
                print (("-" x $pos) . "o" . ("-" x (19 - $pos)));
                $pos++; $pos %= 20;
                usleep 50000;
                print ((chr 8) x 20);
                yield;
            }
            print( ' ' x 20);
            print((chr 8) x 20);
            return;
        }
     
        sub fin_progression {
            $fin = 1;
            $barre->join;
        }
    }
     
    sub data {
        my $result;
        for(1..1000000){
            $result = $_ + 2;
            yield;
        }
        print "\a";
        return $result;
    }
     
    lance_progression;
     
    my $result = data;
     
    fin_progression;
     
    print "$result\n";
     
    lance_progression;
     
    $result = data;
     
    fin_progression;
     
    print "$result\n";
    Voilà, ça nous fait un code un peu plus propre

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 22
    Points : 18
    Points
    18
    Par défaut YES
    UN GRAND MERCI..
    C'est parfait....

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

Discussions similaires

  1. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 14h16
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 11/08/2002, 00h52
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 17h33
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 23h37
  5. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 11h21

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