Avatar billede semiprofkode Nybegynder
28. december 2005 - 20:52 Der er 12 kommentarer

Timer skifter timing

Jeg har lavet et lille program som bruger en timer, oprettet som en control i visual studios visuelle gui miljø. Denne timer er sat til at køre hver 15. millisekund.

Det mærkelige er, at på min ene pc kører den langsommere end på min anden pc, lige indtil jeg åbner windows media player, så kører den hurtigt.

Er disse timere helt upålidelige? Jeg har ikke haft andet end bøvl med dem.
Avatar billede arne_v Ekspert
28. december 2005 - 21:05 #1
Windows er ikke noget super real time styre system.

Derfor kan det sikkert godt gå noget længere end 15 ms engang imellem. Afhængigt af
hvad der ellers sker på systemet.

Hvis du har behov for virkelig real time, så findes der special styre systemer
til den slags.
Avatar billede semiprofkode Nybegynder
29. december 2005 - 10:15 #2
Jeg er nødt til at holde mig til windows. Hvad kan jeg så gøre?
Avatar billede sovsekoder Nybegynder
29. december 2005 - 21:49 #3
timere er upålidelige i windows som arne siger. Hvad skal du lave? Hvis det er noget tidkritisk kan det måske være en løsning at måle tiden fra timer aktivering (n-1) til (n), og på den måde få et mere præcist billede af hvor lang tid der går mellem dine "timer events".

Du kan måske lave noget interpolation (ved at bruge tidsintervallet mellem dine timer events) for at finde finde dine værdier ved intervaller på 15.ms?
Avatar billede arne_v Ekspert
29. december 2005 - 22:22 #4
Du kunne prøve at hæve prioriteten på din timer tråd i forhold til andre ting som
kører på systemet.

Men Windows er ikke et real time styre system og C# er næppe et real time
programmerings sprog (p.g.a. garbage collection).
Avatar billede semiprofkode Nybegynder
30. december 2005 - 11:34 #5
Interessante råd. Det der undrer mig mest, er at timeren løber hurtigere EFTER jeg starter windows media player. Opdagede det ved et tilfælde fordi jeg skulle se en film.

Jeg bruger timeren til at bevæge cursoren på skærmen(musen), så det er ret tydeligt hvor tit timeren aktiveres, det ses på cursorens hastighed.
Avatar billede arne_v Ekspert
30. december 2005 - 16:25 #6
Jeg kan heller ikek forklare den effekt, men schedulering er en ret kompleks sag,
så vi skal ikke kunne udelukke at det kan ske
Avatar billede sovsekoder Nybegynder
01. januar 2006 - 20:16 #7
hvis du skal flytte musen (dx) i x-retningen og (dy) i y-retningen, kunne du gemme den aktuelle position i doubles og konvertere dem til int når de skal bruges. På den måde kan du bruge decimal-tal når du beregner den nye position for musen. Ideen er så at du kan fremskrive musen position på baggrund af det tidsinterval der er gået fra sidste timer event til nuværende.


hvis din kode oprindeligt er noget med:
// Calc dx and dy
// ...
// Update and Set mouse location
x = x+dx;
y = y+dy;
SetMouseLocation(x,y);

På denne måde vil din kode være afhængig af at den aktiveres ret præcist (via din timer).

!Du kunne overveje at omskrive koden så der tages højde for tidsforskellen:

// Save last activation time
DateTime lastActivationTime = globalActivationTime;
// set current activation time
globalActivationTime = DateTime.Now;
TimeSpan eventTimeSpan = DateTime.Now-lastActivationTime;
double adjustment = eventTimeSpan/15.0;
dx = dx*adjustment;
dy = dy*adjustment;

x = x + dx;
y = y + dy;
SetMouseLocation(int)x, (int)y);

På denne måde tager koden højde for usikkerheden der ligger i dine timerevents.
Avatar billede sovsekoder Nybegynder
01. januar 2006 - 20:23 #8
...faktoren "adjustment" justerer dx og dy. Hvis der er gået 7.5 ms siden sidste event så vil "adjustment" være lig med 0.5. mussecursorens tilbagelægger derfor kun den halve distance og vil befinde sig i det forventede slutpunkt efter 15ms....

kan det måske bruges?
Avatar billede semiprofkode Nybegynder
02. januar 2006 - 18:17 #9
Aha ha ha. Genialt forslag, mit indre legebarn er aktiveret og jeg vender tilbage så snart jeg har afprøvet om det er muligt og dermed i sandhed genialt.
Avatar billede sovsekoder Nybegynder
24. januar 2006 - 13:53 #10
fik du noget til at virke ?
Avatar billede semiprofkode Nybegynder
24. januar 2006 - 14:00 #11
Har ikke fået det afprøvet, det er blevet nedprioriteret, ikke droppet, men du skal have pointene for et super forslag.
Avatar billede sovsekoder Nybegynder
25. januar 2006 - 09:41 #12
tak. et svar.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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