Bonjour,

J'ai un problème assez simple à résoudre, et pourtant j'ai passé pas mal de temps dessus. Ainsi je viens ici en quête d'aide.

J'ai fait un script en Perl qui prend un nombre en paramètre. Imaginons 5.

Le script va pourcourir une liste d'IP, puis va modifier le statut de chacune d'elle en base.

Il va le faire pour les 5 premières, puis attendre 30 secondes. Il va alors checker leur nouveau statut. Si c'est à "Done" alors il va pouvoir libérer une place dans le slot d'IP à traiter (ici 5). En gros il ne doit pas y avoir plus de 5 IP en cours de traitement.

L'algo que j'ai fait suivi du code mis en place actuellement :

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
 
 
Foreach MesIP :
       UpdateEnBaseDuStatus
       Ajouter de l'Id de l'IP dans le tableau @IdTodoRouter
 
If ($IpBatch = ($IpBatch - $FreeSlot) {#Si Nombre Max à traiter (ici 5) = (5 - FreeSlot)
     Do{
          Sleep(30);
          my $i;
          Foreach (@IdTodoRouter){
          my $NewStatus = rechercheNewStatus($IdTodoRouter[$i]);
          ## Free Detection :
          if ($NewStatus = "Done") {
               $FreeSlot++;
               $NbIp--;
               Print "ID : " $IdTodoRouter[$i]." est à Done";
               @IdTodoRouter = delete_Tab ($i,@IdTodoRouter); ### Supprime l Id du tableau
          elsif ($NewStatus = "Doing") {
               Print "ID : " $IdTodoRouter[$i]." est à Doing"; 
               $i++;
         }
         while ($IpBatch = ($IpBatch - $FreeSlot));
}else{
...
}
Là j'ai un bug d'affichage dans le sens où quand le script voit que j'ai une IP à "done", il va alors augmenter le nombre de FreeSlot et va donc sortir de la boucle. Hors le traitement n'est pas terminé, j'aimerai qu'il termine de lister l'état des 5 status.

Voyez-vous comment faire cela s'il-vous-plait ? (En fait en écrivant ce post, je me dis qu'une boucle For pourrait résoudre le problème ?) Par ailleurs, si vous avez du temps pour critiquer le script en place je suis preneur.

D'avance, merci pour votre aide et bon weekend.