Uhrzeit in Datei speichern


  • Mod

    Dazu wirst du einen Präzisionstimer deines Betriebssystems bemühen müssen. clock() gibt üblicherweise nicht mehr her als diese Auflösung.



  • Guten morgen!

    Kann mir vielleicht jemand die Benutzug eines Präzisionstimers etwas genauer erklären?

    Die Auflösung bringt mir wenig wenn ich das ganze in einem Diagramm visualisieren möchte.

    Viele Grüße

    Hilby



  • Hey!

    Für alle die es noch interessiert:
    http://cplus.about.com/od/howtodothingsin1/a/timing.htm

    Hier habe ich den Code für folgende beide Dateien gefunden:

    hr_time.h

    #include <windows.h>
    
    typedef struct {
        LARGE_INTEGER start;
        LARGE_INTEGER stop;
    } stopWatch;
    
    void startTimer( stopWatch *timer);
    void stopTimer( stopWatch *timer);
    double LIToSecs( LARGE_INTEGER * L);
    double getElapsedTime( stopWatch *timer);
    

    hr_time.c

    #include <windows.h>
    
    #ifndef hr_timer
    #include "hr_time.h"
    #define hr_timer
    #endif
    
    void startTimer( stopWatch *timer) {
        QueryPerformanceCounter(&timer->start);
    }
    
    void stopTimer( stopWatch *timer) {
        QueryPerformanceCounter(&timer->stop);
    }
    
    double LIToSecs( LARGE_INTEGER * L) {
        LARGE_INTEGER frequency;
    	QueryPerformanceFrequency( &frequency );
    	return ((double)L->QuadPart /(double)frequency.QuadPart);
    }
    
    double getElapsedTime( stopWatch *timer) {
    	LARGE_INTEGER time;
    	time.QuadPart = timer->stop.QuadPart - timer->start.QuadPart;
        return LIToSecs( &time) ;
    }
    

    Damit bekomme ich eine genügend genaue Darstellung hin! Das ist allerdings eine Windows spezifische Lösung.

    Danke an alle die hier geholfen haben.

    Schönen Tag noch
    Hilby


  • Mod

    Hilby84 schrieb:

    Die Auflösung bringt mir wenig wenn ich das ganze in einem Diagramm visualisieren möchte.

    Wieso? Deine Frage lässt vermuten, dass du genau das suchst. Woher der Sinneswandel? Was möchtest du wissen?

    Das ist allerdings eine Windows spezifische Lösung.

    Tja, anders als systemspezifisch wird es nichts werden. Du kannst das natürlich mit ein paar ifdefs schön wegkapseln, aber du musst für jede Plattform eine Implementierung schreiben. Oder eine Bibliothek suchen, die dies bereits erledigt (Mir fallen aber spontan nur welche für C++ ein, unter anderem C++ selber 😃 ).

    Für Linux wäre das Stichwort beispielsweise clock_gettime . Pass auch auf, dass diese Präzisionstimer (mWn auch QueryPerformanceCounter) teilweise CPU-Zeit, nicht Echtzeit messen (midestens bei clock_getres kann man sich das aber aussuchen). Dies ist je nach Anwendung genau das richtige oder genau das falsch für deine Zwecke. Falls du den Eingang externer Signale aufzeichnen möchtest, dann wäre wohl eher Echtzeit angesagt.



  • Wieso? Deine Frage lässt vermuten, dass du genau das suchst. Woher der Sinneswandel? Was möchtest du wissen?

    Mit "Die Auflösung" meinte ich die Auflösung in 15 ms schritten.

    Was genau ist der Unterschied zwischen Echtzeit und CPU-Zeit?

    Ich messe über eine USB-AD16f Messkarte von BMCM ein analoges 100 Hz Eingangssignal. Das soll möglichst schnell und genau gemessen werden. Zur Visualisierung benötige ich dann natürlich einen Zeitstempel. Daher der genaue Timer.

    Ich programmiere in C, weil die mitgelieferte Programmierbibliothek auch auf C ausgelegt war, genau wie die Beispielprogramme. C++ wäre mir persönlich auch lieber.

    Viele Grüße

    Hilby


  • Mod

    Hilby84 schrieb:

    Wieso? Deine Frage lässt vermuten, dass du genau das suchst. Woher der Sinneswandel? Was möchtest du wissen?

    Mit "Die Auflösung" meinte ich die Auflösung in 15 ms schritten.

    Eben. Gerade das machen die Präzisionszeitgeber doch in feineren Schritten. War denn nicht dein Problem, dass du mit den einfachen Messungen sehr oft den gleichen Zeitstempel bekamst, weil die Ereignisse weniger als 15 ms auseinander lagen?

    Was genau ist der Unterschied zwischen Echtzeit und CPU-Zeit?

    Die Echtzeit (eine Übersetzung durch mich aus dem englischen Wall-clock-time, was es wohl besser trifft) ist die Zeit, die eine (Stopp-)Uhr neben dem (oder im) Computer anzeigt. Die CPU-Zeit ist die Rechenzeit, die dein Programm verbraucht hat. Wenn dein Programm 10 Sekunden lang eine CPU mit 80 % auslastet, dann hat es danach 8 Sekunden CPU-Zeit verbraucht. Diese Angabe wird oft bei Performancemessungen, insbesondere in Multitaskingumgebungen, benötigt.



  • Hilby84 schrieb:

    Kann mir vielleicht jemand die Benutzug eines Präzisionstimers etwas genauer erklären?

    Die Auflösung bringt mir wenig wenn ich das ganze in einem Diagramm visualisieren möchte.

    Um es nochmal etwas genauer zu schreiben:

    "Kann mir vielleicht jemand die Benutzug eines Präzisionstimers etwas genauer erklären, denn die bisherige Auflösung von nur 15 ms kann ich für eine graphische Darstellung nicht gebrauchen."

    Hoffe es ist nun klar, dass ich natürlich eine möglichst genaue Auflösung haben möchte. War etwas unpräzise ausgedrückt.

    Die Echtzeit (eine Übersetzung durch mich aus dem englischen Wall-clock-time, was es wohl besser trifft) ist die Zeit, die eine (Stopp-)Uhr neben dem (oder im) Computer anzeigt. Die CPU-Zeit ist die Rechenzeit, die dein Programm verbraucht hat. Wenn dein Programm 10 Sekunden lang eine CPU mit 80 % auslastet, dann hat es danach 8 Sekunden CPU-Zeit verbraucht. Diese Angabe wird oft bei Performancemessungen, insbesondere in Multitaskingumgebungen, benötigt.

    Das wäre äußerst schlecht. Ich brauche natürlich Echtzeit!

    Ist das hier der Fall, wie kann ich das überhaupt rausfinden?

    Viele Grüße
    Hilby



  • das ad17f hat doch eine bestimmte abtastfrequenz, das reicht doch für die visualisierung. die uhrzeit(wenn überhaupt), brauchst du doch bloß einmal zum programmstart einzulesen.



  • edit:
    gemeint ist natürlich das usb-ad16f, ich sollte vorm absenden wohl nochmal drüber schauen. 😃



  • Habe zwar nicht die Lösung für dein Problem, aber schau dir doch mal diesen Link an, vielleicht bringt es sich weite;
    http://msdn.microsoft.com/en-us/magazine/cc163996.aspx



  • #define MESSUNGEN 5000 
    
    int main ()
    {
      int i;
      char zeitstempel[MESSUNGEN][50];
    

    Es grüßt der Stack ...


Anmelden zum Antworten