mikrosekunden rausholen geht immer noch nicht gescheit!



  • Benutzt du zufällig Windows? Weil dann lies mal das hier, aus der Dokumentation zu ptime t(microsec_clock::local_time()):

    Get the local time using a sub second resolution clock. On Unix systems this is implemented using GetTimeOfDay. On most Win32 platforms it is implemented using ftime. Win32 systems often do not achieve microsecond resolution via this API. If higher resolution is critical to your application test your platform to see the achieved resolution.

    Da steht eindeutig, das Win32 Systeme hier meistens keine Microsekunden liefern. Sag uns doch bitte einfach mal welche Platform du nutzt.



  • Benutz QueryPerformanceCounter/QueryPerformanceFrequency aus der WinAPI.



  • Achja, sag uns doch noch bitte, welchen Compiler du verwendest. Denn laut http://www.boost.org/doc/html/date_time/details.html#date_time.buildinfo sind Microsekunden nicht mit allen Windows Compilern möglich.



  • Artchi schrieb:

    Benutzt du zufällig Windows? Weil dann lies mal das hier, aus der Dokumentation zu ptime t(microsec_clock::local_time()):

    Get the local time using a sub second resolution clock. On Unix systems this is implemented using GetTimeOfDay. On most Win32 platforms it is implemented using ftime. Win32 systems often do not achieve microsecond resolution via this API. If higher resolution is critical to your application test your platform to see the achieved resolution.

    Da steht eindeutig, das Win32 Systeme hier meistens keine Microsekunden liefern. Sag uns doch bitte einfach mal welche Platform du nutzt.

    hmm ja ich benütze Windows XP, AMD64 prozessor. jemand hat gesagt ich soll das benützten weil es plattformunabhängig ist. ja ok hab mir schon gedacht das da was mit Windows nicht gut gehen könnte. ich hab was mit nano verwechselt. nun ja, heisst es also, es geht mit boost nicht?

    ich hab mal die von volkard durchgesucht, nur krieg ich die nicht funktionierend hin. ich benütze visual studio 8. die quellcodes die da angegegeben scheinen nicht vollständig zu sein. und andere sind für borland gedacht? hat vielleicht jemand ein funktionierender code für zeitmessung? mit start und stopp? ich suche danach solange und verschwende mehrere stunden. 😞

    EDIT: oha! mit der hier geht:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main() {
    
    LARGE_INTEGER start_ticks, ende_ticks, frequenz;
    
    double tick_diff     = 0;
    start_ticks.QuadPart = 0;
    ende_ticks.QuadPart  = 0;
    
    QueryPerformanceCounter(&start_ticks);
    QueryPerformanceFrequency(&frequenz);
    
    // ... hier irgendwas machen ...
    
    for (int i = 0; i < 100; i++) {
    
    	cout << " irgendwas " << endl;
    
    }
    
    QueryPerformanceCounter(&ende_ticks);
    
    // benötigte zeit berechnen
    tick_diff = ((double) ende_ticks.QuadPart - (double) start_ticks.QuadPart) / frequenz.QuadPart;
    cout << tick_diff << endl;
    
    cin.get();
    }
    

    geht nur auf windows oder? naja immerhin! ist dann auch egal. für andere wechsle ich dann auf boost um. wenn ihr noch tipps hat, sags mir! vielen dank!



  • funktioniert sehr gut. nur variiert sich die zeit ein wenig hm 😉 liegt wohl an multitasking? wenn andere programme noch laufen beeinträchtigt das oder?



  • Das liegt dadran dass Windows kein Echtzeit-Betriebssystem ist. Du hast kein vom Betriebssystem garantiertes Antwort-Verhalten.



  • 7H3 N4C3R schrieb:

    Das liegt dadran dass Windows kein Echtzeit-Betriebssystem ist. Du hast kein vom Betriebssystem garantiertes Antwort-Verhalten.

    heisst das also die leute nehmen lieber linux wenn die wirklich genau testen wollen wie lange bestimmte codes brauchen? und bringen das dann wieder auf windows?



  • "Linux" ist per se auch kein Echtzeitbetriebssystem. Aber es gibt diverse RT-Modifikationen für Linux.



  • Realtime-Betriebssysteme gibts nicht auf dem Mainstreammarkt. Mußte dich in der Indurtrie umschauen. Das wohl bekannteste RT-OS ist QNX!



  • xBlackKnightx, du musst bloss eine Wechselwirkung mit dynamischen Arrays einbauen, dann geht das.
    Muahahahaha


Anmelden zum Antworten