Soyez le premier à donner votre avis sur cette source.
Snippet vu 5 770 fois - Téléchargée 32 fois
'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
29 mars 2004 à 15:37
j'ai mis ce code car lorsque je cherchais une solution similaire et lors de mes recherches sur VBFrance, j'avais vu des exemples fait par d'autres developpeur mais avec des composants ADO ???? un peu lourd quand même ??
là c'est juste une liste....
29 mars 2004 à 15:34
pour kyrosgear :
Le but de cette Liste FIFO n'est pas de cumuler des milliers de données (je pense que la le principe serait à revoir ), comme tu le dis faire des décalements de données prendraient des ressources.
par contre dans un cas précis c'est intéressant, c'est si, PAR MOMENT, des demandes clients arrivent en même temps (ou presque) et que le serveur n'a pas fini son traitement précédent, dans ce cas on cumule les quelques demandent en attente, pour les traiter au fur et a mesure. (dans mon cas a moi les clients attendent la reponse du serveur ou time out avant de relancer une autre demande donc mon Pb a moi c'etait l'arrivée de demandes de clients quasi en meme temps ).
Fixer le buffer m'embête, alors que la la taille de la liste croit au fur et a mesure qu'elle se rempli, moi je ne m'occupe que de traiter la derniere donnée de ma liste l'avantage de cette technique c'est que on peut continuer a remplir la liste alors qu'en meme temps on la traite (on ne connait pas la position que l'on traite on sait juste que c'est la derniere).
en tout cas si tu pense que ta solution peut être valable pose un bout de code que je test.
n'hésitez pas à critiquer et surtout ( si vous critiquez ) proposé des choses concraites et avec un exemple pour faire avancer le Chimlblic.
29 mars 2004 à 15:10
Je pense que ce serait moins lourd en traitement que de déplacer à chaque ajout toutes les données du buffer. :o)
mais de toute façon on risque encore d'arriver à tableau utilisant énormément de mémoire meme lorsque cela n'est pas nécessaire
et pour ça il faudrait mettre en oeuvre un système de tassement, qui peut prendre pas mal de temps d'execution, d'où je ne sais pas s'il est vraiment interessant...
il est peutetre aussi interessant de fixer un buffer initial en rapport avec l'utilisation, pour minimiser dès le début les changements de taille des 3 tableaux.
:o) ce sont juste des suggestions, je ne suis qu'étudiant :op
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.