Systemzeit ermitteln



  • mein Betreuer sagt dass GetTickCount gibt die Anzahl der ticks und nicht die Zeit selbst zurück. habe da was anderes gefunden:
    SYSTEMTIME st1, st2;
    und dann
    GetSystemTime(&st1);
    printf("Min:%d\nSecond:% d\nMillisecond:%
    d\n" ,st1.wMinute,st1.wSecond,st1.wMilliseconds);
    dabei wird die Systemzeit ausgegeben.
    ich brauche aber zeit, die man braucht für die bearbeitung von einer Anweisung.
    ich weiss, dass ich 1. die Zeit vor und nach dem Abarbeitung der Anweisung messen muss und
    2. dann die Differenz bilden muss. Das 1. geht aber mit 2. habe ich Probleme[code]
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include <sstream>
    #include <iomanip>

    #include <fstream>
    #include <map>
    #include <string>

    using namespace std;

    SYSTEMTIME st1, st2;

    int main(int argc, char* argv[])
    {
    std::map<std::string, std::string> myMap;
    //Data x;
    std::string key;
    std::string code;

    fstream myFile;myFile.open("abc.txt");

    if(myFile.is_open())
    {
    std::string answ;
    std::string buf;

    GetSystemTime(&st1);
    printf("Min:%d\nSecond:% d\nMillisecond:% d\n" ,st1.wMinute,st1.wSecond,st1.wMilliseconds);
    for(int i=0; i<2000000; i++)
    {
    myFile >>key;
    myFile >>code;
    myMap.insert(std::make_pair(std::string(key), std::string(code)));
    }
    GetSystemTime(&st2);
    printf("Min:%d\nSecond:% d\nMillisecond:% d\n" ,st2.wMinute,st2.wSecond,st2.wMilliseconds);
    do
    {
    cin>>key;
    GetSystemTime(&st1);
    printf("Min:%d Second:% d Millisecond:% d\n" ,st1.wMinute,st1.wSecond,st1.wMilliseconds);
    std::map<std::string, std::string>::iterator it = myMap.find(key);
    if(it == myMap.end())
    {
    cout<<"not found"<<endl;
    }
    else
    {
    cout<<(it->second)<<endl;
    //getline(myFile, buf);
    //cout<<buf<<endl;
    }
    GetSystemTime(&st2);
    printf("Min:%d Second:% d Millisecond:% d\n" ,st2.wMinute,st2.wSecond,st2.wMilliseconds);

    cin>>answ;
    }while( answ == "j" );
    }
    else
    {
    cout<<"Can't open file"<<endl;
    exit(1);
    }
    myFile.close();

    return 0;
    }
    kann mir jemand da helfen?



  • Ich würde alles in einem unsigned long long auf Millisekungen umrechnen und dann die Differenz bilden... (So wie im Mathe-/Physikunterricht)



  • ja aber wie st1 und st2 sind vom Typ SYSTEMTIME, wie kann ich diese in irgend was anderes umrechnen?



  • Wie berechnest Du Minuten in Sekunden um?

    t2 = t1 * 60;

    Fachlich korrektes C++

    unsigned long long t2 = t1 * 60;
    

    In diesem Fall musst Du Minuten in Millisekunden und Sekunden in Millisekunden umrechnen und das zusammenaddieren. Da das programmiertechnisch jetzt nur noch Analogie und ansonsten Mittelstufenmathematik ist, spare ich mir das ausführliche Beispiel mal, das sollte jetzt aber wirklich so gehen 🙂



  • LordJaxom schrieb:

    Wie berechnest Du Minuten in Sekunden um?

    t2 = t1 * 60;

    Fachlich korrektes C++

    unsigned long long t2 = t1 * 60;
    

    In diesem Fall musst Du Minuten in Millisekunden und Sekunden in Millisekunden umrechnen und das zusammenaddieren. Da das programmiertechnisch jetzt nur noch Analogie und ansonsten Mittelstufenmathematik ist, spare ich mir das ausführliche Beispiel mal, das sollte jetzt aber wirklich so gehen 🙂

    geht aber nicht , kommt diese Meldung:
    testdatei.cpp(51) : error C2296: '*' : illegal, left operand has type 'void'
    was nun?



  • Links das richtige hinschreiben!

    Ja wie wärs wenn Du uns zu der Fehlermeldung wenigstens noch den passenden Code hinklatschen würdest 😕 oder muss ich jetzt auswendig wissen was Du versucht hast? :p



  • Code kannst du oben anschauen, einziges was ich versucht habe war:
    unsigned long t1, t2;
    und dann t1 = (GetSystemTime(&st1) * 60 );
    diese Zeile liefer die obengenannte Fehlermeldung



  • GetSystemTime gibt nichts zurück. Du musst schon per Punktoperator auf die Minuten zugreifen um diese in Sekunden umzurechnen:

    GetSystemTime(&st1);
    t1 = (st1.wMinute * 60 );
    


  • Du greifst doch eindeutig im printf auf die Werte Minuten, Sekunden und Millisekunden der struct SYSTEMTIME zu. Was fällt so schwer daran in einer Berechnung auf die gleichen Werte zuzugreifen?



  • habe hingekriegt, danke an alle


Anmelden zum Antworten