Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

What is the most accurate timer on a unix system? (c language)

Posted on 2004-04-09
3
Medium Priority
?
568 Views
Last Modified: 2013-12-26
I am simulating the datalink layer between two  entities in a network.

I need to get down to microseconds if possible.

I'm compiling c code on a the gcc compiler.

I basically need to do this.

StartTime = getTime();


loop(   )
{
........
  CurrentTime = getTime();
  if(CurrentTime - StartTime > 50 microseconds)
  {
     do this;
  }
  ......
}


Any ideas on the best timer function to use?

Thank you.


0
Comment
Question by:oxygen_728
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 23

Assisted Solution

by:brettmjohnson
brettmjohnson earned 800 total points
ID: 10795453
Although gettimeofday() supports microsecond resolution, the clocks on most
machines do not tick more than a few hundred times per second, causing the
returned microsecond values from gettimeofday() to jump by large quanta.
0
 
LVL 3

Accepted Solution

by:
idt earned 1200 total points
ID: 10795654
Like Brett.. said, gettimeofday supports usec resolution, but diiferent systems may jump by large increments, run the following test app to test your system.

#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>

/*
const char* TimeToString(const struct tm* t) {
  static char buf[30];
  strftime(buf,sizeof(buf),"%Y-%m-%d %H:%M:%S",t);
  return buf;
}

const char* FormatTime(const struct timeval* v) {
  static char buf[128];
  struct tm t;
  localtime_r(&v->tv_sec, &t);
  sprintf(buf,"%s.%ld", TimeToString(&t),v->tv_usec);
  return buf;
}
*/

void difftimeval(const struct timeval* v, const struct timeval* w, struct timeval *r) {
  r->tv_sec=(v->tv_sec - w->tv_sec);
  r->tv_usec=(v->tv_usec - w->tv_usec);
  return;
}

int main(void) {
  int i;
  struct timeval v,w,r;
  gettimeofday(&w,0);
  for(i=0;i<10;i++) {
    gettimeofday(&v,0);
    difftimeval(&v,&w,&r);
    //printf("time is now:%s  elapsed:%ld seconds, %ld usecs\n",FormatTime(&v),r.tv_sec,r.tv_usec);
    printf("elapsed:%ld seconds, %ld usecs\n",r.tv_sec,r.tv_usec);
    memcpy(&w,&v,sizeof(v));
  }
  return 0;
}

My output is:

elapsed:0 seconds, 1 usecs
elapsed:0 seconds, 56 usecs
elapsed:0 seconds, 4 usecs
elapsed:0 seconds, 4 usecs
elapsed:0 seconds, 3 usecs
elapsed:0 seconds, 4 usecs
elapsed:0 seconds, 3 usecs
elapsed:0 seconds, 4 usecs
elapsed:0 seconds, 3 usecs
elapsed:0 seconds, 3 usecs

Unremark for more verbose date/time output
time is now:2004-04-10 00:17:53.583650  elapsed:0 seconds, 1 usecs
time is now:2004-04-10 00:17:53.583863  elapsed:0 seconds, 213 usecs
time is now:2004-04-10 00:17:53.583872  elapsed:0 seconds, 9 usecs
time is now:2004-04-10 00:17:53.583880  elapsed:0 seconds, 8 usecs
time is now:2004-04-10 00:17:53.583888  elapsed:0 seconds, 8 usecs
time is now:2004-04-10 00:17:53.583895  elapsed:0 seconds, 7 usecs
time is now:2004-04-10 00:17:53.583902  elapsed:0 seconds, 7 usecs
time is now:2004-04-10 00:17:53.583909  elapsed:0 seconds, 7 usecs
time is now:2004-04-10 00:17:53.583917  elapsed:0 seconds, 8 usecs
time is now:2004-04-10 00:17:53.583924  elapsed:0 seconds, 7 usecs

compiled with gcc version 3.2.2 (Mandrake Linux 9.1 3.2.2-3mdk)

Daniel
0
 

Author Comment

by:oxygen_728
ID: 10796023
Thank you both for your time. Have a great day both of you!
0

Featured Post

What’s Wrong with Your Cloud Strategy ?

Even as many CIOs are embracing a cloud-first strategy, the reality is that moving to the cloud is a lengthy process and the end-state is likely to be a blend of multiple clouds—public and private. Learn why multicloud solutions matter in this webinar by Nimble Storage.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question