Page 1 sur 1
Chrono
Publié : sam. 22/mai/2004 17:07
par bugrane
Bonjour,
Je voudrais utiliser la librairie pureBasic Tools pour faire un chronomètre précis au centième de seconde. Quelqu'un pourrais-t'il me dire si réellement je pourrais obtenir un chrono fiable.
Merci
Henri

Publié : sam. 22/mai/2004 17:10
par Le Soldat Inconnu
oui
tu peux utiliser la fonction GetTickCount_() qui donne le temps en 1000ième de seconde
exemple :
Code : Tout sélectionner
temps = GetTickCount_()
; tu fais ton action
temps = GetTickCount_() - temps
debug "Le temps mis est de " + str(temps) + "ms"
Publié : sam. 22/mai/2004 17:26
par bugrane
Merci Regis, je ne trouve aucune trace de Gettickcount dans l'aide de purebasic ou de purebasic tools.
Faut t'il initialiser le timer puis-je par exemple utiliser le code ci-dessous
(Il est encore très incomplet)
Declare MonChrono()
Global temp$
Global DixiemeSecondes
Global Secondes
DixiemeSecondes=0
Secondes=0
OpenWindow(1, 100, 100, 500, 200, #PB_Window_SystemMenu, "Chrono")
CreateGadgetList(WindowID())
StringGadget(2,200, 10, 200, 20, "")
StartTimer( 0, 100, @MonChrono() )
SetGadgetText(2, Temp$)
Repeat
Delay(10)
Until WaitWindowEvent() = #PB_Event_CloseWindow
temps = GetTickCount_()
; tu fais ton action
temps = GetTickCount_() - temps
Debug "Le temps mis est de " + Str(temps) + "ms"
Procedure MonChrono()
Temp$=FormatDate("%hh:%ii:%ss", Date())
DixiemeSecondes=DixiemeSecondes+1
If DixiemeSecondes>9
DixiemeSecondes=0
Secondes=Secondes+1
EndIf
DixiemeSeconde$=Str(DixiemeSecondes)
Seconde$=Str(Secondes)
SetGadgetText(2, Seconde$+":"+DixiemeSeconde$)
EndProcedure
Publié : sam. 22/mai/2004 17:32
par bugrane
Désolé pour l'envoi précédant, j'ai mélangé eux morceaux de code
Code : Tout sélectionner
Declare MonChrono()
Global temp$
Global DixiemeSecondes
Global Secondes
DixiemeSecondes=0
Secondes=0
OpenWindow(1, 100, 100, 500, 200, #PB_Window_SystemMenu, "Chrono")
CreateGadgetList(WindowID())
StringGadget(2,200, 10, 200, 20, "")
StartTimer( 0, 100, @MonChrono() )
SetGadgetText(2, Temp$)
Repeat
Delay(10)
Until WaitWindowEvent() = #PB_Event_CloseWindow
Procedure MonChrono()
Temp$=FormatDate("%hh:%ii:%ss", Date())
DixiemeSecondes=DixiemeSecondes+1
If DixiemeSecondes>9
DixiemeSecondes=0
Secondes=Secondes+1
EndIf
DixiemeSeconde$=Str(DixiemeSecondes)
Seconde$=Str(Secondes)
SetGadgetText(2, Seconde$+":"+DixiemeSeconde$)
EndProcedure
Publié : sam. 22/mai/2004 17:34
par julien
bugrane a écrit :je ne trouve aucune trace de Gettickcount dans l'aide de purebasic ou de purebasic tools.
Normal c'est pas dans l'aide puisque c une Librairie de l'OS
Publié : sam. 22/mai/2004 17:50
par Dr. Dri
cherche ElapsedMilliseconds() dans l'aide, par contre je ne suis pas sûr de l'orthographe...
Dri
Publié : sam. 22/mai/2004 20:32
par LavaLava
ElapsedMilliseconds() est une nouvelle instruction de PB 3.90 et elle à l'air de bien tourner...
Publié : sam. 22/mai/2004 21:28
par bugrane
Merci à tous
Mon chrono fonctionne à merveille.
Publié : mer. 09/juin/2004 17:07
par hardy
Très utile aussi: timerid=SetTimer(0,0,t,@proc())
lance la procédure proc() toute les t millisecondes.
Pratique pour les animations de fond.
Il y a évidemment KillTimer_(hwnd,timerid) pour le stopper (hwnd=handle de la fenêtre qui a lancé le timer)
Publié : jeu. 10/juin/2004 9:49
par fweil
Avec tous ces conseils :
Code : Tout sélectionner
Enumeration
#Fenetre_principale
#Image
#Gadget_Image
EndEnumeration
Global Largeur_fenetre.l, Hauteur_fenetre.l, IDImage.l, Pi.f, Depart.l
Procedure Dessine_Aiguille(Longueur.l, Angle.f, CX.l, CY.l, Couleur.l)
LineXY(CX, CY, CX + Longueur * Cos(Angle), CX + Longueur * Sin(Angle), Couleur)
EndProcedure
Procedure Dessine_Pendule()
IDImage = CreateImage(#Image, Largeur_fenetre, Hauteur_fenetre)
StartDrawing(ImageOutput())
CX.l = Largeur_fenetre / 2
CY.l = Hauteur_fenetre / 2
Box(0, 0, Largeur_fenetre, Hauteur_fenetre, #White)
Box(1, 1, Largeur_fenetre - 2, Hauteur_fenetre - 2, $400000)
Dessine_Aiguille(CX * 0.6, Pi * (2 * Hour(Date()) / 12 - 1 / 2), CX, CY, #Yellow)
Dessine_Aiguille(CX * 0.8, Pi * (2 * Minute(Date()) / 60 - 1 / 2), CX, CY, #Green)
Dessine_Aiguille(CX * 0.75, Pi * (2 * Second(Date()) / 60 - 1 / 2), CX, CY, #Red)
Milliseconde = (ElapsedMilliseconds() - Depart) % 1000
Dessine_Aiguille(CX * 0.75, Pi * (2 * Milliseconde / 1000 - 1 / 2), CX, CY, #Blue)
StopDrawing()
SetGadgetState(#Gadget_Image, IDImage)
EndProcedure
;
;
;
Sortie = #FALSE
Largeur_fenetre = 240
Hauteur_fenetre = 240
Pi = 3.14159265
Depart = ElapsedMilliseconds()
If OpenWindow(#Fenetre_principale, 0, 0, Largeur_fenetre, Hauteur_fenetre, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "PureBasic Chrono")
AddKeyboardShortcut(#Fenetre_principale, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
If CreateGadgetList(WindowID(#Fenetre_principale))
ImageGadget(#Gadget_Image, 0, 0, Largeur_fenetre, Hauteur_fenetre, IDImage)
EndIf
Milli = SetTimer_(0, 0, 1, @Dessine_Pendule())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Sortie = #TRUE
Case #PB_Event_Menu
Select EventMenuID()
Case #PB_Shortcut_Escape
Sortie = #TRUE
EndSelect
EndSelect
Until Sortie
EndIf
End
Publié : dim. 17/oct./2004 22:17
par jnspunk
Très utile aussi: timerid=SetTimer(0,0,t,@proc())
lance la procédure proc() toute les t millisecondes.
Pratique pour les animations de fond.
Il y a évidemment KillTimer_(hwnd,timerid) pour le stopper (hwnd=handle de la fenêtre qui a lancé le timer)
Merci! c' est exactement ce que je cherchais!!!
pas de gestion des timers dans purebasic, mais j' espere pour bientot ^^
a noter dans une faq si il y en a une
un petite précision cependant, le GetTickCount_() n' est pas au 1000eme de seconde, mais ce déclenche que toute les 16ms a peu prés. impossible de fabriquer un timer à partir de celui ci!
Publié : dim. 17/oct./2004 22:29
par jnspunk
a ben non c pareil, ca me fait ramé le jeu ^^
ca se déclenche que toute les 16ms a peu prés...