一、Linux下使用setitimer实现定时器
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
#include <stdbool.h>
#include <assert.h>
#define INTERVAL 10000
#define DEBUG 1
#if DEBUG
#define LOG(...) printf(__VA_ARGS__)
#else
#define LOG(...)
#endif
void SignalHandler(int signo)
{
switch (signo) {
case SIGALRM:
LOG("SIGALRM timing time\n");
break;
case SIGINT:
LOG("SIGINT quit\n");
exit(0);
break;
case SIGTERM:
LOG("SIGTERM quit\n");
break;
default:
break;
}
}
int StartTimer(){
signal(SIGALRM, SignalHandler);
signal(SIGINT, SignalHandler);
signal(SIGTERM, SignalHandler);
struct itimerval newValue, oldValue;
newValue.it_value.tv_sec = 0;
newValue.it_value.tv_usec = 1;
newValue.it_interval.tv_sec = 0;
newValue.it_interval.tv_usec = INTERVAL;
if(setitimer(ITIMER_REAL, &newValue, &oldValue) < 0){
perror("setitimer() error");
return -1;
}
return 0;
}
int main(){
int ret = StartTimer();
assert(ret == 0);
while(true){
}
return 0;
}