Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2643 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Attendre un instant avant de reprendre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Attendre un instant avant de reprendre

n°673622
vanilla
datoune's revival
Posté le 14-03-2004 à 22:58:19  profilanswer
 

Bonsoir,
Dans un script perl, plus précisément une fonction, je tente une connexion vers un serveur. Et juste après cette connexion, je souhaiterais exécuter des commandes.
 
Comme le temps de connexion est toujours le même, je pensais faire attendre l'exécution du programme pendant x secondes. Mais je n'arrive pas à le faire..
 
J'ai matté la doc de sleep, wait et perlipc pour le SIGALRM mais c'est visiblement pas ce que je cherche..
 
Une idée ?


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
mood
Publicité
Posté le 14-03-2004 à 22:58:19  profilanswer
 

n°673644
pospos
Posté le 14-03-2004 à 23:06:31  profilanswer
 

je comprends pas trop ce que tu veux
 
Si tu fais une connexion et qu'elle prend un certain temps, alors la fonction qui la suit attendra naturellement que cette connexion soit etablie (c'est à dire que la focntion de connexion retroune qq chose) avant de s'executer.
 
Sinon pour faire une "pause" c'est effectivement sleep(X) qu'il faut utiliser.
Si ca foire pour une raison obscure tu peut essayer select(undef,undef,undef,X) avec eventuellement un X à virgules.
 
Maintenant il se peut que ton probleme soit juste un probleme d'affichage qui ne s'effectu pas la ou tu pense qu'il devrait s'effectuer? Par defaut dans perl 5.8 l'affichage à 'lecran par print est bufferisé et n'est effectué qu'à chaque "\n".
 
Donc met un $|=1 au debut de ton script pour que l'affichage soit immediat à chaque print

n°673992
Tentacle
Posté le 15-03-2004 à 13:07:45  profilanswer
 

je ne saisis pas très bien non plus la question, mais je vois peut-être ce que tu veux :
La fonction de connexion peut être non bloquante et donc elle retournera quelquechose alors que la connexion n'est pas encore terminée. Il faut alors attendre un certain temps avant d'écrire dans la socket.
Si c'est ce que tu veux faire, tu peux utiliser IO::Select :
 

Code :
  1. @ready = IO::Select->new($handle)->can_read();


 
Cette ligne attendra que la socket $handle soit prête en lecture (can_write pour l'écriture). Tu peux aussi spécifié un temps max d'attente en argument à can_read.
N'oublie pas le 'use IO::Select'.

n°674022
pospos
Posté le 15-03-2004 à 13:43:36  profilanswer
 

la connexion est toujours bloquante. Pour passer une socket en non bloquant il faut deja avoir ce socket, et donc avoir fait un new sur IO::Socket qui va etablir la connexion et bloquer comme un porc (meme au dela du time out sous Windows, meme avec des alarm ou quoi que ce soit d'autre). D'ailleurs le passage en non bloquant du socket ne marche pas sous windows, il faut le faire à la main avec un truc du genre ioctl( $sock, 0x80000000 | (4 << 16) | (ord('f') << 8) | 126, 1) || return 0;
 
La solution pour un connexion astnchrone serait peut etre d'utiliser le nouveau module Net-NBsocket et sa fonction $client = connect_NB($port_path,$netaddr);, mais la non plus je ne sais pas si ca marche sous windows...
 
De toute facon pourkoi vouloir faire un truc asynchrone alors qu'il veut justement un truc synchrone, et que c'est le comportement par defaut?

n°674366
Tentacle
Posté le 15-03-2004 à 17:55:29  profilanswer
 

Ok je savais pas ces détails, merci pour l'info. D'un autre côté il n'est peut-être pas sous Linux, mais je suis d'accord sur le fait que je ne vois pas l'interêt de la chose. Mais que veut-il alors ? :pt1cable:

n°674464
vanilla
datoune's revival
Posté le 15-03-2004 à 19:43:01  profilanswer
 

Merci à vous, mais vous êtes aller chercher beaucoup trop loin.
Je débute en perl, et en fait il s'agit seulement d'un script fait en perl pour irssi.
 
Je ne me connecte pas directement via perl, c'est par l'intermédiaire d'une commande irssi/IRC (/server irc.bla.org) que je me connecte au serveur. Bref, en gros, j'aimerais, qu'une fois la connexion établie sur le serveur, je puisse à nouveau exécuter des commandes irssi (/join #channel par exemple).
 
Seulement comment savoir quand cette connexion est établie ?
Je pensais au début attendre qq seconde (puisque le temps de connexion est toujours le même) mais c'est pas la bonne solution !


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°674640
pospos
Posté le 15-03-2004 à 22:23:43  profilanswer
 

t'as pas le moyen de tester si t'es bien connecté? Il se passe koi si tu commence avant d'etre connecté?

n°674667
vanilla
datoune's revival
Posté le 15-03-2004 à 22:56:25  profilanswer
 

Justement, je vois pas comment faire. Parce qu'une fois que la connexion s'établie, le serveur renvoie plein de messages mais c'est par l'intermédiaire d'irssi, donc je sais pas si c'est possible de faire savoir à ce script que la connexion est belle est bien finie.
 
Ou alors il faudrait une commande internet à rissu du genre /connected qui renvoie 0 pour non connecté et 1 pour connecté.
 
Si je commence avant d'être connecter, bin les commandes servent à rien car ces commandes sont liées au serveur (sous entendu il faut être connecté au serveur pour les éxécuter sinon elles servent à rien).


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°674781
pospos
Posté le 16-03-2004 à 09:23:13  profilanswer
 

Ben je peux difficilement t'aider pasque je connais pas irssi
il les renvoi ou ses messages le serveur?
 
Ya forcement une facon de faire "normale" qui inclue un samblant de synchronisation

n°674901
vanilla
datoune's revival
Posté le 16-03-2004 à 11:53:46  profilanswer
 

bin il les balance dans le programme en sortie et ça s'affiche sur l'écran...
 
M'enfin sinon c'est pas grave, je pense que je vais trouver en mattant les sources de scripts perl pour irssi :jap:


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
mood
Publicité
Posté le 16-03-2004 à 11:53:46  profilanswer
 

n°674957
Tentacle
Posté le 16-03-2004 à 12:50:16  profilanswer
 

tu peux pas rediriger la sortie dans un fichier que tu analyserais avec Perl ?(c'est un peu crade c'est vrai)

n°674965
vanilla
datoune's revival
Posté le 16-03-2004 à 12:58:12  profilanswer
 

C'est une idée en effet, à voir.


---------------
Membre du Front de Libération de Datoune | Soutenez le FLD | A Tribute To Datoune
n°689875
drigaudier​e
Perl or die;
Posté le 01-04-2004 à 15:50:44  profilanswer
 

vanilla a écrit :


Je débute en perl, et en fait il s'agit seulement d'un script fait en perl pour irssi.
 
Je ne me connecte pas directement via perl, c'est par l'intermédiaire d'une commande irssi/IRC (/server irc.bla.org) que je me connecte au serveur. Bref, en gros, j'aimerais, qu'une fois la connexion établie sur le serveur, je puisse à nouveau exécuter des commandes irssi (/join #channel par exemple).
 


 
Une technique assez souvent utilisée pour ce genre de temporisation
est d'attendre la fin du motd (désolé j'ai plus le code en tête
faut chercher un peu :)
Une fois reçu cet événement tu es certain d'être connecté et de
pouvoir commencer à /join qqpart.
 
--  
David "Sniper" Rigaudiere
Les mongueurs de Perl - http://www.mongueurs.net
Les journées Perl 2004 - http://conferences.mongueurs.net/2004

n°691252
vanilla
datoune's revival
Posté le 02-04-2004 à 19:17:13  profilanswer
 

Merci !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Attendre un instant avant de reprendre

 

Sujets relatifs
Récupérer la hauteur d'un son à l'instant Tcomptage (nb max de user a instant t )
Attendre un évènement en base de données dans une servlet[Swing] Attendre la fin d'un repaint() pour continuer l'execution...
Reprendre un classcomment attendre la fermeture d'une frame
[Projet SUIVI] Attendre la fin d'un processus..C++ comment faire attendre le programme 5 sec
reprendre une variable php dans une autre pageAttendre la fin du repaint
Plus de sujets relatifs à : Attendre un instant avant de reprendre


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)