LINUX.ORG.RU

История изменений

Исправление COKPOWEHEU, (текущая версия) :

А можно и по методу конечного автомата:

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

unsigned long get_time_ms(){
  struct timeval tv;
  unsigned long time_ms;
  gettimeofday(&tv,NULL);
  time_ms = tv.tv_usec/1000 + tv.tv_sec*1000;
  return time_ms;
}

void task_func(unsigned long cur_time, unsigned long interval){
  static unsigned long next_time = 0;
  if( cur_time >= next_time ){
    next_time = cur_time + interval;
    printf("Time!\n");
  }
}

int main(){
  for(int i=0; i<100; i++){
    usleep(100000);
    task_func( get_time_ms(), 1000 );
  }
}

Исходная версия COKPOWEHEU, :

А можно и по методу конечного автомата:

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

unsigned long get_time_ms(){
  struct timeval tv;
  unsigned long time_ms;
  gettimeofday(&tv,NULL);
  time_ms = tv.tv_usec/1000 + tv.tv_sec*1000;
  return time_ms;
}

void task_func(unsigned long cur_time, unsigned long interval){
  static unsigned long next_time = 0;
  if( cur_time >= next_time ){
    next_time = cur_time + interval;
    printf("Time!\n");
  }
}

int main(){
  for(int i=0; i<100; i++){
    usleep(100000);
    task_func( get_time_ms(), 1000 );
  }
}