Liste tampon fifo utile pour winsock par exemple

Contenu du snippet

Voici un petit code pour faire une liste de type FIFO tres utile pour par exemple une appli WINSOCK multi client.
si votre winsock serveur est tres sollicite par plusieurs clients, et que le temp des traitements serveur risque par moment de depasser les intervalles de demande des clients alors une liste FIFO est neccessaire pour faire un tampon et laisser le temps au serveur de gérer l'execution de son code mais aussi de ne perdre aucunes informations ou faire des melanges.

J'utilise un timer de 1ms mais ce n'est pas lui qui cadence les traitements de la liste ( sinon ca ralentirai sensiblement sur des gros traitements ),
ce timer sert juste a avoir une inactivite lorsqu'il n'y a rien a traiter, par contre dès que la liste se rempli on la traite jusqu'a ce qu'il n'y est plus rien

Source / Exemple :


'cree un formulaire et placé y un timer de 1 ms et un bouton Command1

Dim ListFifo() As String

Function RempliFIFO(MyDonnee As String)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Ajout d'une donnee a notre liste FIFO, des qu'elle est ajoutée, on décale toute notre
'liste de 1 pour que ListFifo(0) soit disponible pour recevoir une nouvelle donnee
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ListFifo(0) = MyDonnee 'met la donnee en premiere position de la pile
    ReDim Preserve ListFifo(UBound(ListFifo()) + 1) 'ajoute un element a la pile
    For i = UBound(ListFifo()) - 1 To 0 Step -1 'boucle pour decaler les donnees de la pile
        ListFifo(i + 1) = ListFifo(i) 'decalage de + 1 pour rendre dispo la premiere postion de la pile
    Next
    DoEvents
    
End Function

Private Sub Command1_Click()
RempliFIFO "test liste FIFO" 'appel la fonction pour alimenter la liste FIFO
End Sub

Private Sub Form_Load()
ReDim Preserve ListFifo(0) 'initialise le premier enregistrement de la pile
End Sub

Private Sub Timer1_Timer()
MyDonneeATraiter As sitrng
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Timer de traitement des informations contenu dans la pile
'si il y a au moins une donnee recu on traite toute la liste FIFO cela permet d'optimiser
'le traitement et de ne pas dependre du timer de 1 ms
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If UBound(ListFifo()) > 0 Then  'si il y a une donnee a traiter 
    For i = UBound(ListFifo()) To 1 Step -1 'parcours la liste dans l'ordre inverse (on traite de la premiere info recu a la derniere)
        ''''''''''''''''' c'est en dessous que l'on execute ce que l'on veut avec cette donnee
        MyDonneeATraiter = ListFifo(UBound(ListFifo()))  'lit le derniere position de la pile
        'ici code pour traiter la donnee ou renvoi vers une fonction
        '''''''''''''''''
        If UBound(ListFifo()) > 0 Then ReDim Preserve ListFifo(UBound(ListFifo()) - 1) 'si la pile a + d'1 enregistrement supprime le dernier enregistrement puisque deja traité
        DoEvents 'pour ne pas prendre toutes les ressources CPU dans des traitements continus de la liste Fifo
    Next
End If
End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.