Chronometrer ma do loop en .net [Résolu]

Signaler
Messages postés
129
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
24 août 2006
-
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
-
Bonjour a tous,

Je developpe une appli et j'aimerais indiquer a l'utilisateur le temps restant avant l'execution de ma do loop.

Or je comprends pas trop comment utiliser les formats de date de vb.net, est ce que je dois declarer mes variable as Date ou DateTime?

Voici une example de ce que je voudrais faire mais qui marche pas:

Dim ClockStartLoop As DateTime
dim Timeloop as DateTime
'-----------------------------------------------
for  loopCounter = 0 to numLoop

ClockStartLoop =Now

'ici y a plein de calcul

'montrer ici le temps restant mais ca marche pas
'Le temps pour faire une loop:
Timeloop =TimeOfDay.Subtract(ClockStartLoop)

'que j'aimerais multiplier par le nombre de loop restante???
debug.writeLine(Timeloop *(numLoop-LoopCounter))

Next
'-----------------------------------------------


Le truc c'est qu'on peut pas multipler un laps de temps....

Bref toutes les idees sont les bienvenues......

Merci

Jeremy

5 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Utilise le constructeur de DateTime pour l'initialiser avec le temps.

Dim TimeRemainingSec As Double
Dim TimeLeft As DateTime

'Calcul du temps restant pour finir les calculs
TimeRemainingSec = Timeloop.TotalSeconds * (numLoop - loopCounter)
TimeLeft = New DateTime(CLng(TimeRemainingSec * 10000000)) '// *10000000 car il faut mettre des 100-nanosecondes

Kenji
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Salut

Subtract renvoie un TimeSpan, il faut donc que Timeloop soit un timeSpan.
Quand tu veux multiplier le temps par le nombre de loop restant, là je n’ai pas trop compris ce que tu voulais dire, mais je pense que tu parlais surement des secondes.
Ca donne:

Dim ClockStartLoop As DateTime = Now
Dim Timeloop As TimeSpan
For loopCounter As Integer = 0 To numLoop
'--> ici y a plein de calcul <--
Timeloop = Now.Subtract(ClockStartLoop)
Debug.WriteLine((Timeloop.TotalSeconds * (numLoop - loopCounter)).ToString)
Next loopCounter

Kenji
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
Messages postés
129
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
24 août 2006

Kenji,

Merci beaucoup pour ta reponse, je cherchais bien a savoir le nombre de secondes pour que ma loop se fasse, ensuite je multiplie ce temps par le nombre de loop restantes pour savoir le temps qu'il reste avant la fin des calculs...

Par contre, une fois obtenu le nombre de secondes restantes, comment fait on pour les convertir au format HH:mm:ss??

J'ai essayer ca mais ca ne marche pas:

Dim TimeRemainingSec As Double
Dim TimeLeft As DateTime

'Calcul du temps restant pour finir les calculs
TimeRemainingSec = (timeForOneLoop) * (numLoop - LoopCounter)

TimeLeft.AddSeconds(TimeRemainingSec)

'C'est la que ca marche pas:
Call DisplayProgress(Format(TimeLeft, "HH:mm:ss")

Merci,

Jeremy
Messages postés
129
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
24 août 2006

Merci beaucoup pour ton aide, ca m'a bien aide...

Derniere question toute bete mais qu'a rien a voir avec l'original, comment fais tu pour mettre ton code en couleur?? j'ai deja essaye le
 mais ca marche pas!!!!


Merci

Jeremy
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
32
Ah, ben ca,
La seul façon pour que ca marche (chez moi), c'est de passer par Word. Copier-coller le texte de vb.net vers Word, puis de re-copier-coller le texte de Word vers ici. Le seul ennui, c'est que y'a un intervalle de ligne trop grand, et je n'arrive pas à l'enlever.
Exemple:


For
loopCounter As Integer
= 0 To numLoop



'--> ici y a
plein de calcul <--



Timeloop = Now.Subtract(ClockStartLoop)

Voilà, c'est pas très pratique a voir.
Surtout, qu'une fois sur trois, la mise-en-forme disparait.

Sinon, la meilleur technique, pour que ca marche, comme j'ai fais plus haut, c'est de le faire manuellement. Mais bon, je le fais que quand j'ai du temps et quand il y a peu de code. Sinon on y passe 3 heurs

Voili, voilou

Kenji
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.