RestlessNick Δημοσ. 29 Μαρτίου 2007 Δημοσ. 29 Μαρτίου 2007 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
Directx Δημοσ. 29 Μαρτίου 2007 Δημοσ. 29 Μαρτίου 2007 Πάντως αν θέλεις να λάβεις τον χρόνο που υποδεικνύει η 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". Ελπίζω να βρεις κάτι χρήσιμο σε αυτά, Καλή τύχη.
RestlessNick Δημοσ. 29 Μαρτίου 2007 Μέλος Δημοσ. 29 Μαρτίου 2007 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
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.