Ergebnis 1 bis 6 von 6

Thema: Zeitmessung im µsek. Bereich

  1. #1
    Member
    Registriert seit
    Feb 2001
    Beiträge
    580
    Renommee
    10

    Zeitmessung im µsek. Bereich

    Hi Leute,

    ich möchte die Zeiten messen, die benötigt werden, um verschieden grosse Datenpackete über eine TCP-/UDP-Verbindung zu senden. Das ganze soll unter Linux und Windows durchgeführt werden, daher hab ich mich bis jetzt weitestgehend an den ANSI-Standard gehalten.
    Leider ist die einzig mir bekannte Möglichkeit darin, Zeiten unter einer Sekunde zu messen, die clock() Methode. Diese ist aber immernoch viel zu ungenau, die kleinste zu messende Distanz liegt bei mehreren Millisekunden.
    Ich habe mir auch schon ein paar Sourcen für höher auflösende Zeitgeber gezogen, aber da kommt immer Assembler ins Spiel, womit die Plattformunabhängigkeit wieder hinüber ist.

    Darum meine Frage:
    Kann mir jemand einen ANSI-C-Befehl nennen, der somit auf beiden Plattformen vorhanden ist und genauere Zeitmessung als clock() ermöglicht bzw. weiss jemand Source dazu, der nicht auf Assembler zurückgreift?

    Hoffe auf Antwort,
    MSB

  2. #2
    Registered User
    Registriert seit
    Aug 2000
    Beiträge
    4.984
    Renommee
    903
    man gettimeofday/setitimer/getitimer/usleep

    Code:
    NAME
           gettimeofday, settimeofday - get / set time
    
    SYNOPSIS
           #include <sys/time.h>
           #include <unistd.h>
    
           int gettimeofday(struct timeval *tv, struct timezone *tz);
           int settimeofday(const struct timeval *tv ,  const  struct
           timezone *tz);
    
    DESCRIPTION
           gettimeofday  and settimeofday can set the time as well as
           a timezone.  tv is a  timeval  struct,  as  specified   in
           /usr/include/sys/time.h:
    
           struct timeval {
                          long tv_sec;        /* seconds */
                          long tv_usec;  /* microseconds */
                          };
    unter windows ka.

    etuli
    [when awarded the Linus Torvalds Award]
    Richard M. Stallman: So, very ironic things have happened, but nothing to match this. Giving the Linus Torvalds Award to the Free Software Foundation is sort of like giving the Han Solo Award to the rebel fleet.

  3. #3
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    230
    Renommee
    10
    In Windows z.B. die Funktion timeGetTime(). Sie liefert dir die Zeit in ms zurück, die seid der Anmeldung vergangen sind.. Die Differenz 2er dieser Zeiten ergibt einen ms Wert, der genau genug sein dürfte...

    #include <MMSystem.h>

    int timtGetTime();

    außerdem musst du z.B. bei VC++ das Library Winmm.lib linken...

    Es gibt noch eine WinAPI Funktion, die genauso funktioniert und für die du keine Lib Datei brauchst.. hab den Namen aber vergessen :|

    Systemunabhängig kannst du das dann mit einem Compilerschalter machen...

  4. #4
    Member
    Registriert seit
    Feb 2001
    Beiträge
    580
    Renommee
    10
    Danke Etuli, gettimeofday() ist genau genug, mit der lässt sich (zumindest auf der Linux-Seite) was anfangen!

    Das timeGetTime() bzw. timeGetSystemTime() ist immer noch viel zu ungenau, die Zeitmessung sollte minimal in 10 Microsekunden-Schritten vonstatten gehen. Werd mich da wohl noch etwas schlauer machen müssen. Trotzdem danke für deine Hilfe, Sensemann.

    MfG,
    MSB

  5. #5
    Member
    Registriert seit
    May 2000
    Beiträge
    786
    Renommee
    10
    mach doch ein #ifdef WIN32 oder #ifdef LINUX oder sowas in der Art :D .. dann nimm unter Win32 QueryPerformenceTimer, das ist das genauste was du bekommst ohne Assembler, das geht weit unter den ms Bereich
    Mit leerem Kopf nickt es sich leichter.

  6. #6
    Member
    Registriert seit
    Feb 2001
    Beiträge
    580
    Renommee
    10
    Genau das hab ich heute Nachmittag gemacht, dynamix! :D
    Schade, dass du's erst jetzt postest...
    Trotzdem danke für deine Hilfe! :)

    Das mit den Präprozessoranweisungen hatte ich schon von Anfang an drin, bei Windoof$ und Linux sind ja schon die zu inkludierenden Header-Dateien unterschiedlich, genauso wie die Syntax zur Sockethandhabung. :(

    Anyway, es läuft jetzt so, wie ich's mir vorstelle, zwei Dateien, die ohne Veränderung unter Linux und unter Win kompilierbar sind.

    Thx for help,
    MSB

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Zeitmessung im Millisekundenbereich C++ / WIN
    Von NoRiskNoDisk im Forum C / C++
    Antworten: 4
    Letzter Beitrag: 12.02.2005, 01:19
  2. Zeitmessung in Millisekunden
    Von Alkoholiker im Forum C / C++
    Antworten: 7
    Letzter Beitrag: 17.10.2004, 18:01
  3. Admin-Bereich
    Von NCLA im Forum PHP, Perl und ASP
    Antworten: 1
    Letzter Beitrag: 02.04.2001, 17:48

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •