0
我有下面的代碼,我希望等待2秒,然後等待5秒循環。幫助setitimer /信號問題
有一個原因,我沒有使用it_interval來重新定時器。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#include <semaphore.h>
sem_t sem;
void sighdlr(int sig)
{
printf("sighdlr\n");
sem_post(&sem);
}
int main(int c, char *v[])
{
signal(SIGALRM, sighdlr);
struct itimerval itv;
struct tm tm;
time_t now;
while(true)
{
itv.it_value.tv_sec = 2;
itv.it_value.tv_usec = 0;
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, NULL);
sem_wait(&sem);
now = time(NULL);
localtime_r(&now, &tm);
fprintf(stderr, "%02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
itv.it_value.tv_sec = 5;
itv.it_value.tv_usec = 0;
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, NULL);
sem_wait(&sem);
now = time(NULL);
localtime_r(&now, &tm);
fprintf(stderr, "%02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
}
}
它產生以下輸出
sighdlr
15:32:50
15:32:50
sighdlr
15:32:52
15:32:52
sighdlr
15:32:54
15:32:54
sighdlr
15:32:56
15:32:56
sighdlr
15:32:58
15:32:58
sighdlr
15:33:00
15:33:00
我不能工作了爲什麼它不等待5秒,第二定時器。
任何想法?
THX M.