damien174
Messages postés78Date d'inscriptionjeudi 4 janvier 2001StatutMembreDernière intervention 2 mars 2012
-
20 juil. 2005 à 19:33
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 2006
-
21 juil. 2005 à 11:51
bonjour j'aurais une petite question, j'ai fait un datalogger en VB6 (pour station de météo) et j'ai une fonction pour calculé le vent dominant qui est tres longue, avez-vous une sugestion pour quelle soit boucoup plus rapide ?
Public Function Calcul_Dominant_1(Valeur_Date As String) As String
Dim MySql As New ADODB.Recordset
Call MySql.Open("SELECT V_Dir FROM Tab_vents WHERE jours_r='" & Left(Valeur_Date, 4) & "-" & Mid(Valeur_Date, 6, 2) & "-" & Mid(Valeur_Date, 9, 2) & "' AND V_Moy <> 0 ", cn, adOpenDynamic)
Dim Tmp As String
Dim G As Integer, H As Integer
Dim I As Integer
I = 0
For G = 0 To 15
Nombre_D(G) = 0
Next G
While Not MySql.EOF
Tmp = Conv_Vent_Num_Dir(Val(MySql!V_Dir)) ' retourne le nom de la direction par rapport a l'angle
For G = 0 To 15 If Direction_D(G) Tmp Then Nombre_D(G) Nombre_D(G) + 1
Next G
MySql.MoveNext
' DoEvents
Wend
MySql.Close
H = 0
For G = 0 To 15
If Nombre_D(G) > H Then
Calcul_Dominant_1 = Direction_D(G)
H = Nombre_D(G)
End If
Next G
End Function
damien174
Messages postés78Date d'inscriptionjeudi 4 janvier 2001StatutMembreDernière intervention 2 mars 2012 20 juil. 2005 à 21:00
oui merci mais j'aime pas trop mettre de doevents car apres j'ai des dépassements de piles.
mais sinon y a pas un autre moyen de faire mon calcul plus simplement ou travaillé en mémoire pour accelérer la function ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 20 juil. 2005 à 22:39
Un DoEvents qui te provoque des dépassement de piles ??? Je ne vois pas
trop le rapport : La pile sature lorsqu'on appelle des fonctions
récursives indéfiniment. Le DoEvents sert à donner la main à Windows
pour raffraichir les contrôles, et donner la main aux autres processus,
ce qui, contrairement à ce qu'on peux penser, accèlére une fonction qui
est trop longue car on ne sature plus les messages de Windows.
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 20062 21 juil. 2005 à 00:05
Salut, je crois que tu t'egare là DarkSidious, DoEvents ne sert et ne servira jamais a accelerer une fonction, mais sert a donner la main au system pendant l'execution de la fonction en permettant d'autres fonction de s'executer, ce qui au contraire ralenti cette fonction. De plus, il est vrai que l'utilisation de DoEvents n'est pas conseiller dans le cas ou une fonction s'execute evenementiellement parlant, car cette meme fonction peut s'executer plusieurs fois, et dans ce cas generer un depassement de pile.
Ricks27
Messages postés79Date d'inscriptionmardi 4 juin 2002StatutMembreDernière intervention29 juillet 2005 21 juil. 2005 à 09:25
Bonjour,
En ce qui concerne le "DoEvents", je suis tout à fait d'accord avec Warning.
Par contre, si tu veux optimiser ta routine, tu peux utiliser les Index si ta basse de données est une base de données Access.
Le gain de temps est concequent . En effet, les index evitent de
parcourir tout tes enregistrements pour trouver ceux qui t'intéressent.
Tu te positionne directement sur les enregistrements que tu as besoin.
Si tu n'as jamais utilisé les index, je peux te poster un exemple et t'expliquer brièvement.
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 20062 21 juil. 2005 à 11:51
Je crois que tu confond rapidité d'execution et rapidité de reprise en main. En effet, si ta fonction doit s'executer par exemple 300fois, qu'elle soit longue ou pas,si tu utilise un doevents le programme mettra plus de temps a executer la fonction 300 fois bien que tu es la main sur l'application.