clock_gettime(CLOCK_CLOCK_THREAD_CPUTIME_ID,... liefert immer 0 sec
-
Hallo
Bei mir lieferttimespec t1; clock_gettime(CLOCK_CLOCK_THREAD_CPUTIME_ID, &t1); sleep(10); timespec t2; clock_gettime(CLOCK_CLOCK_THREAD_CPUTIME_ID, &t2); std::cout<< (t1.tv_sec-t2.tv_sec) <<"s"<<std::endl; std::cout<< (t1.tv_nsec-t2.tv_nsec) <<"ns"<<std::endl;
Immer 0 beim sekunden wert. Auch die Different bei den Nanosekunden ergeben keine 10 Sekunden? Was mache ich falsch? Ubuntu, gcc 4.2 mit -lrt
Edit: bei CLOCK_REALTIME stimtm der Wert hingegen
-
^^versuchs mal mit CLOCK_REALTIME
-
hab ich ja geschrieben, damit geht es...
Im Prinzip habe ich bisher den 08/15 Weg gewählt und imme rnur clock() verwendet. Allerdings stimmt da der Wert nicht mehr, wenn man mehrere Threads verwendet, daher dachte ich, dass CLOCK_CLOCK_THREAD_CPUTIME_ID genau das richtige ist (gibt es auch etliche foren threads dazu). Aber wie gesagt, es kommt kein vernünftiger Wert raus.
-
fricky schrieb:
hab ich ja geschrieben, damit geht es...
Aber während der 30 Sekunden, in denen fricky gerade beim Schreiben war.
CLOCK_CLOCK_THREAD_CPUTIME_ID
Zeig mal ein lauffähiges kleines Programm, das ich testen kann (bin auch gerade hinter einem Ubuntu). Googlen nach dem Symbol bringt nur diesem Thread. (Google ist sehr fleissig!)
-
ich schrieb:
fricky schrieb:
hab ich ja geschrieben, damit geht es...
Aber während der 30 Sekunden, in denen fricky gerade beim Schreiben war.
Gar nicht wahr, das war muffmolch, sorry.
-
ok. hier ein code snippet fuer die unix welt:
#include <ctime> #include <unistd.h> #include <pthread.h> #include "dirent.h" #include "sys/stat.h" #include <sys/syscall.h> #include <sys/stat.h> #include <iostream> int main() { timespec tp1,tp2; clock_gettime(CLOCK_REALTIME,&tp1); double startTime = (double)(tp1.tv_sec)*1.0e9 + (double)(tp1.tv_nsec); std::cout<< "start s/ns: "<<tp1.tv_sec<<","<<tp1.tv_nsec<<std::endl; ::usleep(10); clock_gettime(CLOCK_REALTIME,&tp2); double stopTime = (double)(tp2.tv_sec)*1.0e9 + (double)(tp2.tv_nsec); std::cout<< "stop s/ns: "<<tp2.tv_sec<<","<<tp2.tv_nsec<<std::endl; std::cout<<"exclapsed time: "<<(stopTime-startTime)*1.e-9<<std::endl; return 0; }
-
Für die arme Unix-Welt: man muss gegen librt.a linken.
Versuch's mal so:
... #define SECONDS (1000*1000) ... int main() { ... ::usleep(10 * SECONDS); ... }
start s/ns: 1260878731,431793153 stop s/ns: 1260878741,431896798 exclapsed time: 10.0001
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
µngbd schrieb:
Für die arme Unix-Welt: man muss gegen librt.a linken.
ich weiß
sonst linkt es ja nicht...
Versuch's mal so:
... #define SECONDS (1000*1000) ... int main() { ... ::usleep(10 * SECONDS); ... }
start s/ns: 1260878731,431793153 stop s/ns: 1260878741,431896798 exclapsed time: 10.0001
:)[/quote]
ups, ja das mit usleep war ein copy paste error.. ich nutz eunsere sleep methode, die macht das schon richtig ;-9
aber teste den code bei dir bitte nochmal mit: CLOCK_CLOCK_THREAD_CPUTIME_ID anstelle von CLOCK_REALTIME
denn das beispiel funktioniert bei mir SO auch nur nicht mit CLOCK_CLOCK_THREAD_CPUTIME_ID
-
Du verstehst
CLOCK_THREAD_CPUTIME_ID
einfach falsch. Dabei wird eben die Zeit gemessen, die der Thread läuft. Während des sleeps läuft der Thread aber nicht, sondern wartet einfach. Daher ist die verstrichene Zeit eben nicht 10s+x.PS: Tztztz eine Frage zu einer nicht-ANSI C Funktion mit C++-Code im ANSI C Forum :p
-
ja, sorry. beu mir kam aber auch nichts vernünftiges raus, wenn der thread was gemaacht hat. In diesem Falle rechnet mit 16 Threads ein Strömungsproblem. Während unter Windoof mit clock die richige Zeit z.B. 8s pro Thread rauskommt, sind es unter Linux 16*8 also 128 sec.
Und mit CLOCK_THREAD_CPUTIME_ID 1.e-15