ticks praeziser herausholen, wie?
-
Hallo Zusammen,
Ich schicke ein bestimmmtes Mal Daten von Client zu Server hintereinander.
Auf der Server Seite wird eine Zeitmessung gemacht, wie lange fuer jedes
empfangenen Element gebraucht wird, zu parsen. Nun ich habe
das Problem, dass die gemessenen Ticks mit 10000er erhoeht werden(dadurch
unpraezis).In dem Log datei stehen "0" ticks fuer erste 456 Elemente und ploetzlich
bei 457.te element steht der tick auf "10000" Wert. Bis zum 569.te Element
steht der Tick-Wert noch auf dasselbe "10000", ploetzlich wird der Wert beim
570.te Element zu "20000" inkrementiert.Aus der Log datei (vierte spalte ist Ticks):
0 17 17 0 1 17 34 0 2 17 51 0 .... 455 17 7752 0 456 17 7769 0 457 17 7786 10000 458 17 7803 10000 ... 568 17 9673 10000 569 17 9690 10000 570 17 9707 20000 571 17 9724 20000 ...
Und mit solcher hohen Inkrementierung geht es immer weiter in der Log datei...
Der Code wo Zeitmessung stattfindet:/* .. */ clock_t start, finish ; signal(SIGINT,proc2cont) ; /* sig handler fuer ausgabe der gespeicherten elem */ /* .. */ start = clock() ; /* zeit auf 0 gesetzt */ while( (received = recvfrom(sockfd, buffer, BIN_BUF_LEN-1 , 0, (struct sockaddr *) &client, &sin_size )) > -1){ /*standard udp receive */ ptr = buffer ; if(!parse_raw_data(&proc_list[counter], ptr, BIN_BUF_LEN-1)){ fprintf(stderr,"%ldth proc has no valid packet\n",counter) ; } finish = clock() ; proc_list[counter].cumulative_time = finish - start ; /* differenz gespeichert */ /* finish-start wird als %ld bei proc2cont in datei ausgegeben. */ counter++ ; }
Was ich nicht verstehe ist, dass die Inkrementierung anstatt 10er, 100er ticks
mit 10000er stattfindet. Ok, die Groesse jedes Element, die vom Client
geschickt wird, schwankt zwischen 17 und 160 byte.Also nicht gross...
Trotzdem sollte es moeglich sein, mit clock() bessere Aufloesung zu erzielen.
Gibt clock() nicht die ticks aus, die ein Prozessor gemacht hat? Wie komme ich
auf ne bessere Aufloesung?Gruss,
-
weiss auch nicht, warum 'clock()' bei dir so schlecht auflöst, aber versuch's doch mal mit 'gettimeofday()'
-
Hallo freak,
timer-freak schrieb:
weiss auch nicht, warum 'clock()' bei dir so schlecht auflöst, aber versuch's doch mal mit 'gettimeofday()'
danke fuer die Posting. ja also, bin mittlerweile bissl' weitergekommen.
clock_gettime(CLOCK_REALTIME, &start)
liefert mir schon die ticks aber irgendwie die Werte schwanken.. Meine Erwartung
waere dass die ticks staetig steigen.. Steht ne kurze Ausgabe hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-211175.html
Irgendeine Idee?Gruss,