Salam
j'ai un programme qui fait des calcul sur des matrices, et je veux connaitre le temps d'execution en secondes ou mili secondes!
ce programme est lancé par un bouton!
comment faire?
Version imprimable
Salam
j'ai un programme qui fait des calcul sur des matrices, et je veux connaitre le temps d'execution en secondes ou mili secondes!
ce programme est lancé par un bouton!
comment faire?
Salut :D
Utilise GetTickCount ;)
Exemple:
Voila ;)Code:
1
2
3
4 Lancement:=GetTickCount; //TonTraitement Duree:=GetTickCount-Lancement; //Le tout en millisecondes
N'oublie pas le tag [Résolu] ;)
plein de post existe deja la dessus et les faq y repondent !!!
voici des leins :
http://c.developpez.com/faq/c/?page=divers
http://vb.developpez.com/faq/?page=Routines#tps_exec
je te conseille d'ailleurs le 2ieme lien..., j'utilise moi meme cette fonction en C++ et tu as juste a faire une soustraction!!!
:faq::faq::faq:
merci je vais les essayer et je vous donnerai une réponse!
ca marche, c'est sur!!! tester et approuver!!!;):D:D:D
voici le code que j'ai utilisé
quand j'ai déclaré les deux variable de type integer, ça n'a rien donné, et quand je les ai déclaré de type Byte, il m'a donné la prmeière fois 16miliisecondes ensuite il ne m'a rien donné que 0 millisecondes pour les autres executions ?Citation:
var lancement,duree: byte; // car en integer ça n'a rien donné
begin
Lancement:=GetTickCount;
.....
....
....
Duree:=GetTickCount-Lancement; //Le tout en millisecondes
showmessage(inttostr(duree)+' millisecondes');
end;
:roll:
pourtant, tu n'as que ca a faire... et le chrono est sur.
par contre, moi, ca marche en int (je travail en c++ pour cette utilisation)
ce qu'il me donne comme résultat n'est pas rassurant car pour le meme example, il me donne des fois des chiffres >0 et les autres fois des 000:roll:
essaye avec un long...
j'ai essayé de les déclarer long avant Byte, il ne l'accepte pas!
salut,
heu je veux pas dire mais gettickcount renvoi un cardinal
:f1:
je m'excuse, mais c'est quoi un cardinal et quel effet ça engendre sur la solution que je cherche ?Citation:
Envoyé par HumanTool
une valeur entière peut être de plusieurs type en delphi : byte, integer, short, etc (cherche dans l'aide de delphi "types entiers" pour plus de details)
Cardinal représente une valeur entière positive stoquée sur 4 octets (32 bits) allant de 0 à 4 294 967 296 (2 puissance 32) ; il est différent du longint qui lui peut être négatif
pour en revenir à ton problème, tu dois déclarer tes variables lancement et durée de type Cardinal
cardinal est un type d'entiers comme par exemple integer, byte ...
cardinal est sur 64 bits je crois (ou 32 :P) ... donc très gros :D
Regarde dans l'aide pour + d'info sur ce type.
EDIT : trop tard ...
Pour moi, c'est pas anormal.Citation:
Envoyé par smail21
J'ai déjà fais ça pour voir le temps de chargement de plusieurs images. Le temps est rarement le même. Je suppose que ça dépend de la charge du procésseur à ce moment.
il me semble avoir lu que pour les traitements courts, la fonction n'était pas performante et donnait parfois 16 ms à considérer comme #0...
tu as intérêt à mesurer une répétition de n fois le traitement, pour avoir une durée qui s'affranchira des petites incertitudes quand elles sont du même ordre que ce que tu veux mesurer.
Bonjour,
Un "tickcount" vaut environ 18 millisecond, et comme apparament le traitement prend moins de temps que çà on retrouve soit 0 soit 1 suivant qu'on est resté ou non dans le même tick.
Pour mieux évaluer le temps, il faudrait un mode de debug avec une boucle qui effectue 100 fois le traitement.
moi ausis je pense que ça dépend des performances du microprocesseur!
car j'ai changé le type des variables de byte à Cardinal, ça me donne des fois 800 MS pour un traitement long et des fois 1230 ms pour le même traitement(exemple).
je vais essayer de multiplier cette durée par 100 et voir
je vous donnerai des nouvelles:aie:
N'oublie pas d'ajouter
application.processMessages
Code:
1
2
3
4
5
6
7
8
9
10
11 i1 :integer ; d1 double ; begin i1 := 0 ; d1 = double(now)) ; application.processMessages ; ..... i1 :=(round((double(now)- d1))*86400*1000)) ; showmessage(inttostr(i1)+' millisecondes');
ça ne donne encore rien
bon j'abandonne puisque ça ne peut pas me donner un temps réel, puisque ce temps dépends de la disponibilité des ressources systèmes
merci à tous