Avatar billede entracore Nybegynder
06. juli 2002 - 10:08 Der er 16 kommentarer og
1 løsning

Flere Timer funktioner i en VB applikation

Hey

Hvordan anvender man flere Timer funktioner i VB
Jeg har forsøgt mig med at indsætte 2 Timer funktioner. F.eks. Timer1 og Timer2.

Når jeg så vil kalde disse som f.eks.

Dim Timer1_Start As Long
Dim Timer1_Stop As Long
Dim i As Integer

Timer1_Start = Timer1

Do While i < 10000
i = i + 1
Loop

Timer1_Stop = Timer1


Msgbox "Total Time: " & Timer1_Stop - Timer1_Start


Få jeg bare et blankt 0

Hvad gør jeg forkert.
Avatar billede kedde65 Praktikant
06. juli 2002 - 10:43 #1
Du skal huske at sætte interval på din timer funktion. Hvis interval er 0, så tæller den ikke.

VH CK
Avatar billede entracore Nybegynder
06. juli 2002 - 10:47 #2
kedde65 >> Selvom at jeg sætter et interval, f.eks. 1000, på min Timer funktion bliver resultatet stadigvæk 0.
Avatar billede tjacob Juniormester
06. juli 2002 - 11:06 #3
For det første: Du kan ikke bruge timere til at måle tid, hvis det skal være bare nogenlunde præcist.

For det andet: Det loop du har lavet tager under et millisekund at gennemløbe, så resultatet vil være nul alligevel.

Gør sådan i stedet:
I et modul indsættes:  Declare Function GetTickCount Lib "kernel32" () As Long
-GetTickCount returnerer tiden der er gået siden Windows blev startet i millisekunder.

Din kode rettes til:

    Dim Timer1_Start As Long
    Dim Timer1_Stop As Long
    Dim i As Long
   
    Timer1_Start = GetTickCount
   
    Do While i < 100000
    i = i + 1
    Loop
   
    Timer1_Stop = GetTickCount
   
    MsgBox "Total Time: " & Timer1_Stop - Timer1_Start

Bemærk: Jeg har ændret i til en long, og sat loopet til 100000.
Bemærk også: Dette Do-Loop tager dobbelt så lang tid som et tilsvarende For-Next loop.

/tjacob
Avatar billede entracore Nybegynder
06. juli 2002 - 11:16 #4
Tjacob >> Vil GetTickCount funktionen kunne håndtere flere forskellige tidsregistreringer på en gang. F.eks. jeg vil gerne måle tiden to forskellige steder.
Avatar billede tjacob Juniormester
06. juli 2002 - 11:22 #5
Ja, du kan bruge den så meget du vil. Du skal bare holde styr på dine variable.

GetTickCount returnerer blot resultatet fra en tæller der starter når du tænder din maskine (når Windows loades), og så ellers står og tæller millisekunder.

Den giver IKKE noget billede af tidspunktet, men kan kun bruges relativt.
Altså til at måle tidsINTERVALLER.

/tjacob
Avatar billede entracore Nybegynder
06. juli 2002 - 11:53 #6
tjacob >> Det ser meget fint ud. Du skal nok få dine point. Jeg har dog lige hævet point satsen fordi jeg har et tillægsspørgsmål.

Spørgsmålet er om det er muligt at lave en grafisk tæller i sin VB applikation der tæller op for hvert sekund.

Jeg har forsøgt mig med løkker og en rekursiv funktion, men programmet går ned.

Har du nogle tid til hvordan dette gøres ???
Avatar billede tjacob Juniormester
06. juli 2002 - 11:58 #7
Ja det har jeg helt sikkert. Hvad mener du med grafisk?
En søjle der vokser eller lignende?
Kunne du være lidt mere specifik?
Hvad skal tælles? Hvor længe? Er formen hele tiden i fokus?

/tjacob
Avatar billede entracore Nybegynder
06. juli 2002 - 12:03 #8
Det jeg tænker på er en tekst tæller mm:ss (Minutter:Sekunder)

...Og denne skal tælle fra brugeren trykker på f.eks. en start knap til brugeren trykker på en stop knap.
Avatar billede tjacob Juniormester
06. juli 2002 - 12:48 #9
Hvis du skal tælle hele sekunder kan du sagtens bruge en Timer.
F.eks. sådan:

Public sTime, mins, secs

Private Sub Command1_Click()
    If Command1.Caption = "Start" Then
        Command1.Caption = "Stop"
        Timer1.Enabled = True
    ElseIf Command1.Caption = "Stop" Then
        Command1.Caption = "Start"
        Timer1.Enabled = False
    End If
    sTime = 0
    mins = 0
    secs = 0
End Sub

Private Sub Timer1_Timer()
    Dim a, minsa
   
    a = Time
    If sTime < a Then
        sTime = a
        secs = secs + 1
        If secs = 60 Then
            mins = mins + 1
            secs = 0
        End If
        If mins = 100 Then mins = 0
        If secs < 10 Then secs = "0" & secs
        If mins < 10 Then minsa = "0" & mins
        Text1.Text = minsa & ":" & secs
    End If

End Sub

NB: Din Timers interval bestemmer du selv. Jo mindre interval jo mere præcist, men også mere systemkrævende. 200 passer nogenlunde. Så tjekker den 5 gange i sekundet.
Med denne kode SKAL caption på din knap være: "Start" til at begynde med.

/tjacob
Avatar billede entracore Nybegynder
06. juli 2002 - 13:06 #10
tjacob >> Undskyld det var vist mig der skulle have været mere præcis i min formulering.

Det jeg ønsker er en tekst timer/tæller brugeren kan se i selve applikationen. Dvs. at denne tæller opdateres hvert sekund og vises i en label som mm:ss
Avatar billede tjacob Juniormester
06. juli 2002 - 13:13 #11
Jamen det er da også det koden ovenfor gør!??
-Bortset fra at tiden skrives til Text1. Det kan du jo blot lave om til en Label.

Prøv at tage en helt tom form.
Indsæt en knap Command1, og sæt dens Caption til "Start".
Indsæt en timer Timer1, og sæt dens interval til 200, og Enabled til "False".
Indsæt en tekstboks Text1.
Kopier ovenstående kode direkte ind i formen.

Kør formen, og tryk på knappen.

/tjacob
Avatar billede entracore Nybegynder
06. juli 2002 - 13:25 #12
Undskyld det er mig der sover - jeg skulle nok have gået lidt tideliger i seng.

Ovenstående eksempel virker til dels. De eneste problem er at Timeren i textboxen opdateres ikke automatisk. De eneste der står når man trykker på Start knappen er 0:01. Så den tæller ikke automatisk op så der står 0:02, 0:03 osv.

Hvad kunne jeg gøre galt?
Avatar billede tjacob Juniormester
06. juli 2002 - 13:37 #13
Det ved jeg ikke ;-(

Hvis du har gjort nøjagtigt som beskrevet ovenfor, så virker det.

-Har lige dobbeltchecket (klippede koden ovenfor, og satte ind i et helt nyt projekt; det virker).

-Har du sat timerens interval?
-Hedder kontrollerne det rigtige: Command1, Timer1, Text1 ?
-Er knappens Caption "Start" (stort T)?

/tjacob
Avatar billede tjacob Juniormester
06. juli 2002 - 13:37 #14
Stort S        ;-)
Avatar billede tjacob Juniormester
06. juli 2002 - 13:38 #15
Har du denne linie med øverst?

Public sTime, mins, secs
Avatar billede entracore Nybegynder
06. juli 2002 - 13:41 #16
Ja det virker sgu fint. Jeg havde glemt at indsætte "Public sTime, mins, secs"

Tusind tak for din hjælp og tålmodighed ;-)
Avatar billede tjacob Juniormester
06. juli 2002 - 13:52 #17
-Glad for at kunne hjælpe. Tak  /tjacob
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester