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 gedachthoffe 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-Filedouble 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 SidewinderJe 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 aufwendigerViel Spaß
@c.rackwitz Eigentlich ist alles noch viel schlimmer nicht Windoof oder sondern Windoof und Unix