Avatar billede flvind Nybegynder
21. april 2006 - 07:35 Der er 12 kommentarer og
1 løsning

1/10 forhold mellem timere

Hej jeg har to forskellige timere til at køre. Den ene timer kører en opdateringsproces og den anden timer skal måle tiden denne opdateringsproces tager. Det giver en forskel på 1/10 således at hvis opdaterer timerens interval er 3000 og testtimerens interval er 1, så når testtimeren kun at tælle til ca 290.

Min kode for update timeren ser således ud:
---start kode
        private void UpdateTimer_Tick(object sender, EventArgs e)
        {
            #region TestTimerStart
            tbCount.Text = CountInt.ToString();
            CountInt++;
           
            if (CountInt == 1)
            {
                testTimer.Enabled = true;
                testTimer.Start();
            }
            if (testTimer.Enabled == true)
            {
                testTB.Text = "Timer startet";
            }
            #endregion

koden som min update timer kører

            #region TestTimerStop
            if (CountInt == 2)
            {
                testTimer.Stop();
                testTimer.Enabled = false;
                testTimer.Dispose();
                testTB.Text = "Timer stoppet";
                int updateTimerTemp = UpdateTimer.Interval;
                int testTimerTid = ((updateTimerTemp/10) - (testTimerTemp));
                tidTB.Text = testTimerTid.ToString();
                lsBoxTid.Items.Add(tidTB.Text);
            }
            if (CountInt == 3)
            {
                CountInt = 0;
                testTimerTemp = 0;
            }
            #endregion
        }
---slut kode---

min kode for testtimerens tick event ser således ud
---kodt start---
        private void testTimer_Tick(object sender, EventArgs e)
        {
            //testTimerTemp++;
            testTimerTemp = testTimerTemp + 1;
            timerTB.Text = testTimerTemp.ToString();
        }
---slut kode---

Hvad kan dette problem skyldes?
Avatar billede tuxic Nybegynder
21. april 2006 - 10:08 #1
Timer i windows kører ikke altid særligt præcist. Så det kan fx skyldes at testtimeren bare ikke har fået lov til at afvikle endnu.

Hvis du skal måle hvor lang tid opdateringsprocessen tager hvorfor noterer du ikke bare hvad klokken er lige inden og lige efter opdateringsprocessen?
Avatar billede flvind Nybegynder
21. april 2006 - 10:12 #2
kan du give et eksempel?
Avatar billede flvind Nybegynder
21. april 2006 - 10:13 #3
forresten
det handler nok om millisekunder
Avatar billede tuxic Nybegynder
21. april 2006 - 10:57 #4
Fx. DateTime start = DateTime.Now;

...

DateTime slut = DateTime.Now;

og så tag den dér fra. (fx trække de to tidspunkter fra hinanden: Det giver en TimeSpan og så se på den).

Hvis du er nede i millisekundsområdet er timere alt for usikre.
Avatar billede flvind Nybegynder
21. april 2006 - 10:59 #5
hvad skal man så bruge?
Avatar billede tuxic Nybegynder
21. april 2006 - 10:59 #6
Vær opmærksom på at DateTimes oplsøning måske ikke altid er mindre end 10 sek. Se fx

http://www.codeproject.com/csharp/highresclock.asp

(jeg har ikke læst koden der nævnes- den kan være god eller dårlig).
Avatar billede tuxic Nybegynder
21. april 2006 - 11:02 #7
Fx DateTime eller en variant der måler mere præcist. (Jeg mente bare at timere så du startede med nok ikke duer)
Avatar billede tuxic Nybegynder
21. april 2006 - 11:07 #8
LOL. "Vær opmærksom på at DateTimes oplsøning måske ikke altid er mindre end 10 sek. Se fx"

skulle jo være
Vær opmærksom på at DateTimes oplsøning måske ikke altid er mindre end 10 msek. Se fx
Avatar billede flvind Nybegynder
21. april 2006 - 13:11 #9
hej igen jeg har kigget lidt på dette

http://www.codeproject.com/csharp/highperformancetimercshar.asp

jeg har lavet min kode om til

---kode start---
        private void UpdateTimer_Tick(object sender, EventArgs e)
        {

            #region TestTimerStart
            //timer som kører for hver update
            HiPerfTimer pt = new HiPerfTimer();
            pt.Start();
            //timer som kører når en tæller er mellem 1 og 2
            HiPerfTimer testTimer = new HiPerfTimer();
            //tæller som tæller antal ticks fra update timer
           
            CountInt++;
            tbCount.Text = CountInt.ToString();

            if (CountInt == 1)
            {
                testTimer.Start();
                testTB.Text = "Timer startet";
            }
            #endregion

koden der skal testes

            pt.Stop();
            Console.WriteLine("Duration: {0} sec\n", pt.Duration);

            #region TestTimerStop
            if (CountInt == 2)
            {
                testTimer.Stop();
                Console.WriteLine("Duration: {0} secwdsa\n", (testTimer.Duration-UpdateTimer.Interval));
                testTB.Text = "Timer stoppet";


            }
            if (CountInt == 3)
            {
                CountInt = 0;
                testTimerTemp = 0;
            }
            #endregion
}
---kode slut---

jeg har i dette to timere
pt starter når updatetimer_tick kommer og stopper når den sidste linie af koden er kørt værdien giver ca 0,0421363609062046 sec

test timer starter når tælleren er på 1 og stopper når tælleren er på 2. hvis jeg trækker updatetimer interval fra denne værdi siger den 200sec

hvis jeg instiller updatetimeren på 10sec altså 10000 bliver resultatet af testtimer ca -4500sec

har du nogen ide til hvad dette skyldes?
Avatar billede tuxic Nybegynder
22. april 2006 - 11:02 #10
Jeg har stadigt ikke forstået hvorfor du bruger timere? Hvorfor ikke blot lave en DateTime.Now (eller en tilsvarende med større opløsning) før og efter den kode der skal måles.

Det er vanskeligt at afgøre hvorfor dit program leverer et negativt tal (ved ikke hvad UpdateTimer er. Kender ikke HiPerfTimer. Hvorfor tror du at outputtet fra dit program er sekunder?). Måske er det bedre at undgå at bruge timere?

Der er ingen grund til at bruge timere her. Måske er du blot blevet forvirret og tror at en timer er noget, der tager tid på ting?
Avatar billede flvind Nybegynder
25. april 2006 - 09:04 #11
Hej nu har jeg fået løst problemet og fået målt en tid. Du ledte mig på den rette vej så kan du ikke sende et svar?
Avatar billede tuxic Nybegynder
25. april 2006 - 13:18 #12
Najs at du fik det bikset.
Avatar billede flvind Nybegynder
25. april 2006 - 13:29 #13
tiden blev ca 50 ms hvilket er ganske fint
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