Avatar billede jgni Nybegynder
07. december 2002 - 15:51 Der er 9 kommentarer og
1 løsning

Timer-event

Hej :)

Jeg forsøger at løse et lille problem.

Jeg vil meget gerne vide følgende :

Jeg har en timer-event. Når den "udløber" sker der nogen ting i programmet.
Hvad sker der hvis den ikke er færdig med de ting inden timer-event'en er udløbet næste gang ?

Kommer næste event så i kø, eller kan den udføre 2 events udløst af det samme timer-program samtidig ?

Jeg kan da lige tilføje at jeg meget gerne vil ha' at den kan udføre flere på en gang
Avatar billede kjeld_klit Nybegynder
08. december 2002 - 10:53 #1
Ingenting. Timer kører nemlig ikke når systemet er optaget.
Derfor er Timer-funktionen ikke velegnet til noget der kræver nøjagtighed i tid, netop fordi den er afhængig af hvor optaget programmet er, samtidig vil det også have stor betydning hvor kraftig en computer programmet kører på.

Der er til gengæld intet i vejen for at Timer kan udfører flere ting ved hvert gennemløb - bare den kan nå det:-)

Prøv dette eksempel og se hvordan Timer1 forsinkes:

Option Explicit
Private Sub Form_Load()
Me.Caption = 0
Timer1.Interval = 500
End Sub

Private Sub Timer1_Timer()
Call TestTimer
End Sub
Private Sub TestTimer()
Me.Caption = Me.Caption + 1 'Viser antal gange Timer1 kører
Dim i As Integer
For i = 0 To 100 'Skift mellem 100 - 1000 - 10000 og se forskellen
    Text1.Text = i
    Text1.Refresh
Next i
End Sub
Avatar billede kjeld_klit Nybegynder
08. december 2002 - 10:59 #2
Bemærk i øvrigt i ovenstående eksempel at højeste værdi = 32767 (Integer)
Og at formen ikke lukkes når systemet er optaget, dvs. når For-Next løkken kører.
Avatar billede jgni Nybegynder
08. december 2002 - 14:19 #3
Er det så forstået rigtigt at timeren "holder pause" mens Timer1_Timer() udføres og derefter starter med at generere timer-events igen, når Timer1_Timer() er færdig ?
Avatar billede kjeld_klit Nybegynder
08. december 2002 - 14:32 #4
Forestil dig at når Timer-hændelsen indtræffer, at du så sætter programmet (dermed computerens processerkraft) på en krævende opgave. Timer.Interval går så "i stå" så at sige, den tæller simpelthen ikke før der er resurser frigivet igen.

Ovenstående lille program illustrerer meget godt en situation hvor For-Next løkken sugar al kraften for at løse opgaven så der ikke er noget til overs til Timer.Interval
Avatar billede jgni Nybegynder
08. december 2002 - 15:20 #5
Altså ja, det var forstået rigtigt at den begynder at "tælle" igen så snart den er færdig med de statements/opgaver der er i Timer1_timer() og ikke før ?
Avatar billede kjeld_klit Nybegynder
08. december 2002 - 15:31 #6
I praksis virker det sådan - ja. Men om det forholder sig sådan rent teknisk ved jeg ikke. Jeg tror ikke at man har besluttet at Timer.Interval skal "vente" på at alle opgaverne er gjort, men at det, som sagt, er afhængig af hvor anstrengt maskinen er. Dermed kan også andre ting som Windows (eller andre programmer som fx OE der tømmer postkasse) bruge noget af kraften, hvilket går ud over Timer.Interval.
Avatar billede jgni Nybegynder
08. december 2002 - 15:48 #7
Jeg er klar over, at hvis et andet program bruger processoren, så sker der selvfølgelig ikke noget i vb-programmet. Men det jeg vil vide er hvilke ting der sker _i VB-programmet_. Jeg har en timer, der generer events. Nogle gange tager de statements der udføres når der kommer et event længere tid en timer-intervallet. Det jeg så gerne vil vide er, om jeg kan være sikker på at timeren _ikke_ genererer events igen før udførslen af disse statements er slut.
Avatar billede kjeld_klit Nybegynder
08. december 2002 - 16:09 #8
Ja det kan du.
Avatar billede jgni Nybegynder
08. december 2002 - 16:12 #9
Jeg takker :)
Avatar billede kjeld_klit Nybegynder
08. december 2002 - 20:46 #10
:-))
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