Zeitdifferenz mit wSecond



  • Hallo,
    ich will die Laufzeit meines Programms berechnen, jedoch geht es mir nicht um irgendwelche Millisekunden um die Geschwindigkeit zu testen sondern um eine längere Laufzeit von mehreren Stunden.

    ich habe folgendes probiert.

    GetLocalTime (&st_start);
    GetLocalTime (&st_aktuell);
    
    double dif=st_aktuell.wSecond-st_start.wSecond;
    
    char *Laufzeit;
    Laufzeit = new char[80];
    
    char buffer2[20];
    _itoa( dif, buffer2, 10 );
    lstrcpy (Laufzeit, "");
    strcat( Laufzeit, buffer2 );
    
    TextOut(hDC2,tabelle_x+325+200,tabelle_y+210,Laufzeit,strlen(Laufzeit));
    

    soweit so gut (ich weiss, dass ich damit bisher nur die Zeitdifferenz der Sekunden berechne) jetzt geht es aber los ... ist die Sekundenzeit aktuell = 58
    und die Startzeit 34 hat man die gewollte differenz von 24 Sekunden.

    Springt aber die aktuelle zeit um auf 1 dann ist die aktuelle Zeit als die Startzeit und ich bekomme als Sekundenwert -33 ... das darf natürlich so nicht sein.

    Wie kann ich das verhindern?
    MISCHU



  • Wie das geht, steht in der Hilfe der SYSTEMTIME-Struktur:

    MSDN schrieb:

    Remarks
    It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should

    • Convert the SYSTEMTIME structure to a FILETIME structure.
    • Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
    • Use normal 64-bit arithmetic on the ULARGE_INTEGER value

    Damit kannst Du Dir dann was basteln:

    UINT_PTR DiffFileTime(const FILETIME* pft1, const FILETIME* pft2) 
    { 
      ULARGE_INTEGER li1, li2;
    
        li1.QuadPart = reinterpret_cast<const ULARGE_INTEGER*>(pft1)->QuadPart / 10000000; 
        li2.QuadPart = reinterpret_cast<const ULARGE_INTEGER*>(pft2)->QuadPart / 10000000; 
    
      return(abs(static_cast<int>(li1.QuadPart - li2.QuadPart)));
    } 
    
    UINT_PTR DiffSystemTime(const SYSTEMTIME* pst1, const SYSTEMTIME* pst2) 
    { 
      FILETIME ft1, ft2; 
    
        SystemTimeToFileTime(pst1, &ft1); 
        SystemTimeToFileTime(pst2, &ft2); 
    
      return(DiffFileTime(&ft1, &ft2)); 
    }
    

    Beide Funktionen ermitteln die Differenz in Sekunden.



  • Danke für deine Hilfe ... aber dein Code hat bei mir irgendwie nen paar Fehler erzeugt ... doch über den Tipp der MSDN hat's dann doch geklappt.

    FILETIME fileTime1; 
                ULARGE_INTEGER uLargeIntegerTime1; 
    
                FILETIME fileTime2; 
                ULARGE_INTEGER uLargeIntegerTime2; 
    
                LARGE_INTEGER uLargeIntegerTimeRESULT; 
                FILETIME fileTimeRESULT; 
                SYSTEMTIME systemTimeRESULT;   
    
          result = SystemTimeToFileTime(&st_start, &fileTime1); 
          result = SystemTimeToFileTime(&st_aktuell, &fileTime2); 
    
          uLargeIntegerTime1.LowPart        =   fileTime1.dwLowDateTime; 
          uLargeIntegerTime1.HighPart       =   fileTime1.dwHighDateTime; 
          uLargeIntegerTime2.LowPart        =   fileTime2.dwLowDateTime; 
          uLargeIntegerTime2.HighPart       =   fileTime2.dwHighDateTime; 
    
          uLargeIntegerTimeRESULT.HighPart  =   uLargeIntegerTime2.HighPart - uLargeIntegerTime1.HighPart; 
          uLargeIntegerTimeRESULT.LowPart   =   uLargeIntegerTime2.LowPart  - uLargeIntegerTime1.LowPart; 
    
          fileTimeRESULT.dwLowDateTime      =   uLargeIntegerTimeRESULT.LowPart; 
          fileTimeRESULT.dwHighDateTime     =   uLargeIntegerTimeRESULT.HighPart; 
    
          // Zahl der Millisekunden seit dem 1.1.1601 
          result = FileTimeToSystemTime( &fileTimeRESULT, &systemTimeRESULT); 
    
    		GetTimeFormat (LOCALE_USER_DEFAULT, LOCALE_USE_CP_ACP, &systemTimeRESULT, NULL,
    		uhrzeit_laufzeit, NUM_ELEMENTS(uhrzeit_laufzeit));
    
    		TextOut(hDC2,tabelle_x+325+200,tabelle_y+210,uhrzeit_laufzeit,strlen(uhrzeit_laufzeit));
    

    Falls es mal jemand braucht.
    ALSO TROTZDEM DANKE

    MISCHU



  • MISCHu schrieb:

    aber dein Code hat bei mir irgendwie nen paar Fehler erzeugt ...

    😕 Welche?



  • Kann ich leider nicht rekonstruieren (Goldfischgedächtnis => es hält alle Infos nicht länger las 3 sek.)

    Deshalb unterstelle ich einfach mal, dass der Fehler auf meiner Seite (bei der Implementierung) liegt.

    THX
    MISCHU


Anmelden zum Antworten