08. oktober 2003 - 17:08Der er
10 kommentarer og 1 løsning
Præcis tidtagning
Jeg vil gerne lave et program i c++ under linux, som kan tage en præcis tid (det bedste jeg har kunnet finde ud af, er at tage tid i hele sekunder) Hvordan gør jeg?
arne_v> Det er korrekt at opløsningen er i millisekunder i ovennævnte kald. CPU'er efter Pentium har en instruction counter, så man med endnu større opløselighed kan måle tiden (det bliver i nano sekunder).
Det afgørende er, at hvor ofte task scheduleren kører. Da denne er interrupstyret af clock interruptet skal der pilles ved timerkredsen (og det gøres der naturligvis). I en standard linux installation på i386 kører scheduleren 100x/sek (og ikke 1/18.2 gange i sekundet som jeg fejlagtigt skrev i et øjebliks kortslutning), dvs. man er ikke garanteret mere end at "måle processen" kører oftere end 100x/antal processer (antaget at de har samme prioritet, hvilket de naturligvis ikke har i praksis).
Med ex. 10 processer (der belaster så meget de kan, dvs. ikke suspender), vil programmet således kun køre 10x i sekundet i 1/10 sek. Inden for det 1/10 del sekund kan man målet meget præcist med utime (mener jeg det hedder i C) og når tråden bliver suspendet målet man slet ikke.
Dvs. man kan kun måle præcist i de intervaller hvor processen kører (ellers tag et kig på RTLinux).
Udover at jeg angav scheduleren timing forkert, var kommentaren nok for tynd til at blive forstået. Håber dette har forklaret hvad jeg mente/tænkte.
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.