Thread



  • Hast recht war ziemlich unverständlich!

    Na eigentlich will ich wirklich nur ein timer der mir die Zeit zurück liefert aber auf millisekunden genau! Hatte aber keine gefunden weil time(Null) ist nur sekunden genau. Also hatte ich die Idee mit Threads so das ich ein Hauptprogramm habe und dort den Sleep_Thread aufrufe, sodass das Hauptprogramm trotzdem weiterläuft. Verstehst?



  • Viel genauer als mit echten Zeitabfragen wirst du mit sleep() auch nicht werden (zumal zur eigentlichen Schlaf-Zeit noch die ganze Verarbeitung drumherum kommt). Wenn du genauer als eine Sekunde messen willst, hast du im Standard noch clock() (das misst die Zeit seit Programmstart in Clock-Ticks = 1/CLOCKS_PER_SEC Sekunden) und mehr als genug Funktionen der einzelnen Betriebssysteme (welches verwendest du?).



  • Naja ich verwende windows und Microsoft Visual Studio 2003. Aber wenn ich #include <clock.h> mach dann findet der die Bibliothek nicht? Kannst mal ein kleines Beispiel machen die mir in einer Schleife zurück gibt wie die aktuelle Zeit ist!



  • Erstens: clock() hat keinen eigenen Header, sondern befindet sich in der <time.h>.

    Zweitens: Unter MS hast du z.B. QueryPerformanceCounter() (verwendet einen hochauflösenden Counter - die genaue Auflösung erhältst du mit QueryPerformanceFrequency()) und timeGetTime() (liefert die Systemzeit in Millisekunden (seit dem Start von Windows).



  • Wie sieht dann so ein Aufruf von QueryPerformanceFrequency() aus? Weil der braucht ja ein argument!Und bei timeGetTime meckert der auch rum. Welche aurgumente übergeb ich und welche bekomm ich zurück?



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • timeGetTime() benötigt kein Argument 😉

    Für den Performance-Counter sieht es so aus:

    LARGE_INTERGER freq;
    if(!QueryPerformanceFrequency(&freq)
    {
      cerr<<"kein Timer verfügbar\n";
      return;
    }
    while(!ende)
    {
      LARGE_INTEGER t;
      QueryPerformanceCounter(&t);
      cout<<(double)t.QuadPart/freq.QuadPart<<" Sekunden vergangen."<<endl;
      ...
    }
    


  • Ich bekomm beim aufruf von timeGetTime() immer einen Fehler.'unresolved externel symbol'. Also Eingabewert braucht timeGetTime() nix, und von welchen Typ ist die Variable die ich zurück bekomme?



  • Schau in der msdn nach:
    http://msdn2.microsoft.com/en-us/library/ms713418.aspx
    ...da steht sowohl Rückgabewert (DWORD) als auch dass die Winmm.lib eingebunden werden muss 😉



  • Aber das Beispiel ist in C++ brauch das in C!Ich glaub ich bin im falschen Forum???



  • Ne ne bist schon im richtigen Forum. WinApi ist C!
    Woran haperts denn?

    schirrmie



  • Also habs jetzt so gelöst! Ich habs mit clock() gemacht. Und einfach den neuen clock() "stand" mit dem alten verglichen! Kleine Frage noch dazu. Ist das normal das clock() immer 1000 mal in einer Sec zählt! Oder nur Zufall. Vielleicht eine dumme Frage aber es gibt eigentlich keine dummen Fragen!



  • rollerfreak2 schrieb:

    Ist das normal das clock() immer 1000 mal in einer Sec zählt! Oder nur Zufall.

    Das ist höchstens ein inoffizieller Standard - offiziell steht die Auflösung von clock() in CLOCKS_PER_SEC (und wenn du portabel sein willst, solltest du auch dieses Makro verwenden).



  • Verwende GetTickCount() - das liefert ähnliche Werte wie timeGetTime(), bloss dass sich die Genauigkeit von GetTickCount() nicht erhöhen lässt (rechne mal mit ca. 15-50msec), die von timeGetTime allerdings schon. Returnwert von beiden Funktionen ist in ms seit dem Booten des Systems.

    Wenn du doch timeGetTime verwenden willst solltest du die winmm.lib linken.

    #pragma comment(lib, "winmm.lib")
    

Anmelden zum Antworten