C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Uhr mit genauerer Auflösung

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Gentoopower
Guest





PostPosted: Fri Oct 07, 2005 3:47 pm    Post subject: Uhr mit genauerer Auflösung Reply with quote



Hallo ich habe folgendes Problem.

Ich benötige eine Zeitfunktion, die mir eine genauere Auflösung bringt
als die time() funktion, die ja nur mit einer Genauigkeit von 1s arbeitet.

Ich benötige ca 1ms Genauigkeit.


Gibts da schon irgendwo Bibliotheken für sowas, hat sonst jemand ne Idee?

Ziel ist es in meiner Anwendung zu messen, wann bestimmte Aktionen auf
einen Ausgangspunkt(Programmstart) hin eingetreten sind, also mir reicht
dabei die relative Zeit nach Programmstart.
Sprich Zeit 0 = Programmstart

nach 2,120s wurde ein Knopf gedrückt
nach 4,500s wurde eine Beredchnung fertig .....

Danke im voraus für eure Ideen.


Viele Grüße Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Richard
Guest





PostPosted: Fri Oct 07, 2005 11:09 pm    Post subject: Re: Uhr mit genauerer Auflösung Reply with quote



Stefan Ram wrote:
Quote:
Gentoopower <gentoopower (AT) yahoo (DOT) de> writes:

Ich benötige eine Zeitfunktion, die mir eine genauere Auflösung
bringt als die time() funktion, die ja nur mit einer
Genauigkeit von 1s arbeitet.


Das ist durch C++ nicht so spezifiziert, die Granularität
ist implementationsbestimmt.


Ich benötige ca 1ms Genauigkeit.


Deine Implementation von ::std::time() könnte diese
Anforderung ja schon erfüllen. Sonst wird ein entsprechender
Aufruf der Umgebung (Betriebssystem, Uhr) benötigt.


Stimmt time() kann das sogar, habs gerade in der MSDN nachgelesen:

struct __timeb64 tstruct;
_ftime64( &tstruct );
printf( "milliseconds:ttt%un", tstruct.millitm );

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Dirk Jagdmann
Guest





PostPosted: Sat Oct 08, 2005 8:40 am    Post subject: Re: Uhr mit genauerer Auflösung Reply with quote



Hallo Gentoopower,

Quote:
Ich benötige eine Zeitfunktion, die mir eine genauere Auflösung bringt
als die time() funktion, die ja nur mit einer Genauigkeit von 1s arbeitet.
Ich benötige ca 1ms Genauigkeit.

Ich arbeite nun schon seit langem mit folgendem Codeschnippsel. Sollte
auf allen heute verbreiteten Betriebssystemen ein Ergebnis liefern:

#if defined(__glut_h__)
/// @return the number of milliseconds since program start.
#include <stdint.h>
inline uint32_t timeGetTime()
{
return glutGet(static_cast<GLenum>(GLUT_ELAPSED_TIME));
}
#elif defined(__unix__)
#include <stdint.h>
#include <sys/timeb.h>
/// @return a number which is incremented every millisecond.
inline uint32_t timeGetTime()
{
struct timeb t;
ftime(&t);
return (t.time&0xfffff)*1000 + t.millitm;
}
#elif defined(_WIN32)
#include <mmsystem.h>

#else
#error unknown platform. Can not provide timeGetTime()
#endif
--
---> Dirk Jagdmann ^ doj / cubic
----> http://cubic.org/~doj
-----> http://llg.cubic.org

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Dirk Clemens
Guest





PostPosted: Sat Oct 08, 2005 10:28 pm    Post subject: Re: Uhr mit genauerer Auflösung Reply with quote

Richard wrote:
Quote:
Stefan Ram wrote:



Stimmt time() kann das sogar, habs gerade in der MSDN nachgelesen:

struct __timeb64 tstruct;
_ftime64( &tstruct );
printf( "milliseconds:ttt%un", tstruct.millitm );


Vorsicht: Die Angabe ist zwar in Millisekunden, die
Auflösung aber nur (soweit ich mich erinnere) in 1/18 Sek.

Unter Windows hilft QueryPerformanceCounter() und unter
Linux gettimeofday().

Dirk

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Gentoopower
Guest





PostPosted: Sat Oct 08, 2005 11:43 pm    Post subject: Re: Uhr mit genauerer Auflösung Reply with quote

Dirk Clemens wrote:
Quote:
Richard wrote:

Stefan Ram wrote:



Stimmt time() kann das sogar, habs gerade in der MSDN nachgelesen:

struct __timeb64 tstruct;
_ftime64( &tstruct );
printf( "milliseconds:ttt%un", tstruct.millitm );



Vorsicht: Die Angabe ist zwar in Millisekunden, die
Auflösung aber nur (soweit ich mich erinnere) in 1/18 Sek.

Dann müsste aber die Ausgabe der Zeit in ms um 1/18s springen, sprich
1/18, 2/18, 3/18?

sieht aber nicht so aus, wenn ich meine Messungen mache. Es sei denn der
ms Wert wird irgendwie zufällig errechnet.

Was natürlich zutrifft ist, dass die Zeit in ms nie wirklich korrekt
sein wird, da ja durch scheduling/preemption das ganze beeinflusst wird,
aber für meine Zwecke sollte es ausreichend sein.

Quote:

Unter Windows hilft QueryPerformanceCounter() und unter
Linux gettimeofday().

Sollte mir obige Genauigkeit nicht reichen, so werde ich wohl zusatzlich
rtdsc instruction nutzen, aber ich denke nicht, dass das der Fall sein wird.

Quote:

Dirk


--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Erik G.
Guest





PostPosted: Thu Oct 13, 2005 4:00 pm    Post subject: Re: Uhr mit genauerer Aufl366sungn^ Reply with quote

Hi,

Quote:
Unter Windows hilft QueryPerformanceCounter() und unter
Linux gettimeofday().

Sollte mir obige Genauigkeit nicht reichen, so werde ich wohl zusatzlich
rtdsc instruction nutzen, aber ich denke nicht, dass das der Fall sein
wird.

Also das mit dem RDTSC würd ich lassen, in einem Dual-CPU-PC (Single-CPU
soll ja im PC-Bereich aussterben) werden die TSCs wohl kaum syncron laufen
(die einzelnen CPU-Kerne werden vom BIOS/OS zu unterschiedlichen Zeitpunkten
in Betrieb genommen) und unterschiedliche CPU-Tacke (im klassischen
Multi-Sockel-System) sind ja auch nicht verboten (hab ich schon mit eigenen
Augen funktionierend gesehen). Wenn Du schon was Platfomabhängiges machen
willst dann wende Dich an das verwendete OS, es stellt Dir bestimmt
geeignete Methoden mit hoher Genauigkeit zur Verfügung.

Grüße
Erik

PS.
Ich hab mal auf einem 4fach PentiumPRO versucht mehrere Threads zum exact
gleichen Zeitpunkt auf eine Resource zugreifen zu lassen (als Härtetest für
eine Critical-Section-Implementierung) und hab mich dafür an den TSC gewand.
Es war ein ganz schöner Aufwand zu ermitteln welcher TSC zu welcher CPU
gehört und dehren Verschiebungen untereinander zu errechnen.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.