#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <sys/time.h>
#include <unistd.h>
#include <sched.h>

struct timeval last;
long WatchTime = 100000L;

static void WatchDogHandler(int signr)
  {
  struct timeval now;
  long long t;

  gettimeofday(&now, NULL);
  t = ((now.tv_sec * 1000000) + now.tv_usec) 
    - ((last.tv_sec * 1000000) + last.tv_usec);
  printf ("Zeit: %llu\n", t);
//  gettimeofday(&last, NULL);
  last = now;
  }
  
int main (int argc, char **argv)
  {
  struct itimerval interval;
  struct itimerval oldinterval;

  if (argc > 1 && argv[1])
    WatchTime = atol(argv[1]);
  printf ("WatchTime: %lu\n", WatchTime);

  oldinterval.it_interval.tv_sec = 0;
  oldinterval.it_interval.tv_usec = 0;
  oldinterval.it_value.tv_sec = 0;
  oldinterval.it_value.tv_usec = 0;

  /* Set the watch dog time */
  interval.it_interval.tv_sec = 0;
  interval.it_interval.tv_usec = WatchTime;
  interval.it_value.tv_sec = 0;
  interval.it_value.tv_usec = WatchTime;

  if (signal (SIGALRM, WatchDogHandler) == SIG_ERR)
    printf ("Signalhandler konnte nicht installiert werden\n");

  setitimer(ITIMER_REAL, &interval, &oldinterval);
  gettimeofday(&last, NULL);

  for (;;) /* do nothing */;
  return 0;
  }

