07. december 2002 - 15:51Der 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
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
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.
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 ?
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
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 ?
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.
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.
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.