Προς το περιεχόμενο

software clock


RestlessNick

Προτεινόμενες αναρτήσεις

Δημοσ.

geia sas paidia, loipon exo mia aporia :

 

mporo na metriso xrono se sec me ti voi8eia tis struct tms

tmstart, tmsend, times, CLOCKS_PER_SEC k.lp.

exo function pou douleuei sosta

 

tora epeidi de me sumferei ka8olou omos na xrisimopoio xrono se morfi clock_t

exo alles 2 functions pou prosomoionoun to xrono san akeraio

void check_timer(pTimer t) { t->tick() ; }

int (kapoia klasi)::tick(void)

{

int old_clk = clk ;

clk ++ ;

for_each(timers.begin(), timers.end(), check_timer) ;

return clk ;

}

opou timers einai mia linked list apo pTimer objects

 

tora otan tre3ei o kodikas mou mporo na paro tin teliki timi tou clk pou einai akeraios,

i aporia mou einai an mporo na metafraso auton ton akeraio se xrono[sec] pou paril8e ?

 

euxaristo ek ton proteron gia opoiadipote voi8eia

Δημοσ.

Πάντως αν θέλεις να λάβεις τον χρόνο που υποδεικνύει η clock σε seconds ως int (αυτό δεν είναι το τελικό πρόβλημα σου; -αν όχι, συγνώμη απλά κατάλαβα λάθος) διαίρεσε το με την σταθερά CLK_TCK (ορίζεται ως 1000.0 στο time.h) κάνοντας cast σε int (υποθέτω πως δουλεύουμε σε 32bit περιβάλλον οπότε το int έχει μεγάλο εύρος τιμών -όσο η long) την συγκεκριμένη πράξη (ώστε να αποφύγεις το float) ή το αποτέλεσμα της difftime.

 

Για την ιστορία: Ορισμένοι compilers (πχ. η MS-C 6.0 για DOS) προσφέρουν αντί της CLK_TCK την αντίστοιχη σταθερά CLOCKS_PER_SEC.

 

Ακολουθεί ένα πολύ γνωστό παράδειγμα χρήσης της clock, γραμμένο σε C/C++ Builder και προσαρμοσμένο ελπίζω σωστά σε ANSI C και στις συγκεκριμένες απαιτήσεις (clock_t => int).

 

>
//---------------------------------------------------------------------------
#include <stdio.h>
#include <time.h>
#include <values.h>

#ifdef __BORLANDC__
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#endif

int main(int argc, char* argv[])
{
  clock_t  clockEnd,
           clockStart = clock();

  for(long lWait=0;lWait<MAXLONG;lWait++)
   { /* Nothing (a Celeron 900Mhz finishes in approx. 7'' with full optimization on) */ }

  clockEnd = clock();

  printf(" (a)It took %d'' for this CPU to count from 0 to %d\n",
         (int)((clockEnd-clockStart)/CLK_TCK),MAXINT);

  printf(" (b)It took %d'' for this CPU to count from 0 to %d\n",
         (int)(difftime(clockEnd,clockStart)/CLK_TCK),MAXINT);

  printf(" Press Enter to quit.. "); fgetc(stdin);

  return 0;
}
//---------------------------------------------------------------------------

 

* Ουσιαστικά χρονομετρώ το μέτρημα της CPU μου (Celeron 900!) από 0 ως MAXLONG, ώστε να αποφύγω την χρήση non ANSI C εντολών όπως της κλασσικής σε DOS Borland C/C++ "delay" ή της MS-Windows API "Sleep".

 

Ελπίζω να βρεις κάτι χρήσιμο σε αυτά, Καλή τύχη.

Δημοσ.

thanx directx gia to endiaferon ,

den itan auto akrivos i aporia mou alla me ekanes na skefto kati diaforetiko

pou me odigise sti lusi,

( evala pantou xronometra anti na anarotiemai an mporo na metafraso enan akeraio pou megalonei sunexos se xrono ) k petuxa auto pou i8ela

opote se euxaristo polu gia ti voh8eia

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...