Chrono

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

Chrono

Message 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 :?:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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"
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

Message 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
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

Message 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
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

cherche ElapsedMilliseconds() dans l'aide, par contre je ne suis pas sûr de l'orthographe...

Dri
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

ElapsedMilliseconds() est une nouvelle instruction de PB 3.90 et elle à l'air de bien tourner...
bugrane
Messages : 24
Inscription : dim. 02/mai/2004 18:28
Localisation : Bruxelles

Message par bugrane »

Merci à tous

Mon chrono fonctionne à merveille.
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message 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)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message 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
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
jnspunk
Messages : 6
Inscription : ven. 15/oct./2004 22:15

Message 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 :D

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!
jnspunk
Messages : 6
Inscription : ven. 15/oct./2004 22:15

Message 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...
Répondre