wo ist der fehler?



  • Compileren von Sidewinders Code führt bei MSVC 6.0

    E:\test\auflös\auflös.cpp(10) : error C2065: 'timeval' : nichtdeklarierter Bezeichner
    E:\test\auflös\auflös.cpp(10) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'start'
    E:\test\auflös\auflös.cpp(10) : error C2065: 'start' : nichtdeklarierter Bezeichner
    E:\test\auflös\auflös.cpp(11) : error C2065: 'gettimeofday' : nichtdeklarierter Bezeichner
    E:\test\auflös\auflös.cpp(19) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'end'
    E:\test\auflös\auflös.cpp(19) : error C2065: 'end' : nichtdeklarierter Bezeichner
    E:\test\auflös\auflös.cpp(21) : error C2228: Der linke Teil von '.tv_sec' muss eine Klasse/Struktur/Union sein
    E:\test\auflös\auflös.cpp(21) : error C2228: Der linke Teil von '.rv_usec' muss eine Klasse/Struktur/Union sein
    E:\test\auflös\auflös.cpp(22) : error C2228: Der linke Teil von '.tv_sec' muss eine Klasse/Struktur/Union sein
    E:\test\auflös\auflös.cpp(22) : error C2228: Der linke Teil von '.tv_usec' muss eine Klasse/Struktur/Union sein
    Fehler beim Ausführen von cl.exe.

    Die Funktion getTimeOfDay führt in der MSDN zu Time.getTimeOfDay sonst gibt es keinen eintrag
    timeval führt in der MSDN zum Platform SDK: Windows Sockets
    The timeval structure is used to specify time values. It is associated with the Berkeley Software Distribution (BSD) file Time.h.

    //                        Sind in der Windows Welt nicht eher diese Strukturen
      time_t aclock;
      SYSTEMTIME SystemTime;
      struct _timeb tstruct;
      struct tm *newtime;
    //                        und diese Funktionen 
      GetLocalTime(&SystemTime);
      time( &aclock );		   // Get time in seconds
      _ftime( &tstruct );
    //                      sinnvoll
    

    Und zum präzisen Timen bietet sich

    LARGE_INTEGER start;
      double frq;
      LARGE_INTEGER f;
      LARGE_INTEGER end;
    
      QueryPerformanceFrequency(&f);
      frq=1.00L/(double)f.QuadPart;
      QueryPerformanceCounter(&start);
    .....
      QueryPerformanceCounter(&end);
      return (((double)(end.QuadPart-start.QuadPart))*frq);
    

    Und da wir uns hier im C-Forum befinden darf ich die Variablen am Anfang des Blockes deklarieren



  • Ah sys/time.h scheint dann komplett UnixOnly zu sein, dann kann das unter Windows natürlich nicht funktionieren. Du michst da etwas 🙂

    Machs dann so wie PAD für Windows 🙂

    MfG SideWinder



  • Schau mal in diesen Beitrag, da ist eine Funktion dies das timen nach dieser Methode übernimmt

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-816068-and-highlight-is-.html#816068



  • SideWinder schrieb:

    Ah sys/time.h scheint dann komplett UnixOnly zu sein, dann kann das unter Windows natürlich nicht funktionieren. Du michst da etwas 🙂

    Machs dann so wie PAD für Windows 🙂

    MfG SideWinder

    Ich mag es überlesen haben, aber wo hat er gesagt, er will für Windows programmieren??



  • kann es auch einfach nur am compiler liegen? hab es mit dem bei dev-c++ und mit dem "microsoft visual c++ toolkit 2003" ausprobiert.

    Der Compiler lässt auf eine Windows-Umgebung schließen 😉

    Edit: Und auch sonst logisch, der User hat die Buildnummer seiner Distri nicht gepostet. Lässt auf Non-Unix schließen 😉

    MfG SideWinder



  • hab es mit dem bei dev-c++ und mit dem "microsoft visual c++ toolkit 2003" ausprobiert. wo ist



  • danke für die demonstration meiner dummheit *g*



  • du hast danach gefragt

    Ja, Ja das Leben ist hart und ungerecht.

    Gute Nacht



  • danke für die antworten aber kann bitte mal jemand posten wie das programm dann fertig aussieht? krieg das nähmlich nich gebacken...
    hab linux un windows, das hier war aber eigentlich für windows gedacht 😋

    hoffe es macht sich jemand nochmal die mühe,



  • Das wird etwas problematisch.

    Die beiden Betriebssysteme haben untershiedliche Aufrufe für solche Timingfunktionen.
    Die einfachste Idee wäre definier dir eine eigene Funktion in einem eigenen File. Überall in deinen Programmen in denen
    du timings messen möchtest rufst du diese Funktion auf. Die Funktion myTiming ist in einem eigenen C-File

    double myTiming(int flag) {
    ...
    }
    

    Unter Windows füllst du dann die Funktion myTiming mit

    double myTiming(int flag) {
    return PerformanceTime(flag);
    }
    

    Unter Unix füllst du dann die Funktion myTiming mit
    einer Funktion die dir dort diese Funktionalität zur Verfügung steht, da kann ich jetzt
    leider nicht helfen ich kenne mich dazu zu wenig in Unix aus, aber da waren ja die Vorschläge von Sidewinder

    Je nach dem in welchem Betriebssystem du arbeitetest bindest du beim linken den richtigen C-Code hinzu.

    Man kann diese Sachen noch verfeineren, in dem man sich zum Beispiel eine Library mit solchen Kompatibilitätsroutinen schreibt,
    oder in dem man mit conditionaler Compilierung (#ifdef)aus einem Source je nach Betriebssystem die entsprechenden Funktionen zusammenstellt. Das ist aber etwas aufwendiger

    Viel Spaß

    @c.rackwitz Eigentlich ist alles noch viel schlimmer nicht Windoof oder sondern Windoof und Unix 🕶


Anmelden zum Antworten