Skip to content

Instantly share code, notes, and snippets.

@kylemanna
Created April 5, 2012 21:29
Show Gist options
  • Save kylemanna/2314299 to your computer and use it in GitHub Desktop.
Save kylemanna/2314299 to your computer and use it in GitHub Desktop.
Simple timer for an ugly loop
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <sched.h>
#include <string.h>
double diff(struct timespec *start, struct timespec *end)
{
struct timespec temp;
if ((end->tv_nsec-start->tv_nsec)<0) {
temp.tv_sec = end->tv_sec-start->tv_sec-1;
temp.tv_nsec = 1000000000+end->tv_nsec-start->tv_nsec;
} else {
temp.tv_sec = end->tv_sec-start->tv_sec;
temp.tv_nsec = end->tv_nsec-start->tv_nsec;
}
return (double)temp.tv_sec + (double)temp.tv_nsec / 1000000000.0;
}
int main()
{
struct timespec time1, time2;
int msg_cnt = 0;
struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = 1; // lowest rt priority
sched_setscheduler(0, SCHED_FIFO, &schedparm);
clock_gettime(CLOCK_REALTIME, &time1);
while (1) {
usleep(1000);
if (++msg_cnt >= 1000) {
double rate, et;
clock_gettime(CLOCK_REALTIME, &time2);
et = diff(&time1, &time2);
rate = msg_cnt / et;
printf("msgs = %d, et = %f, msgs/s = %f\n", msg_cnt, et, rate);
msg_cnt = 0;
time1.tv_sec = time2.tv_sec;
time1.tv_nsec = time2.tv_nsec;
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment