本文共 3267 字,大约阅读时间需要 10 分钟。
记录一下定时器的使用,先copy一份别人的代码
直接上程序
程序1:采用新线程派驻的通知方式
- #include <stdio.h>
- #include <signal.h>
- #include <time.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
-
- #define CLOCKID CLOCK_REALTIME
-
- void timer_thread(union sigval v)
- {
- printf("timer_thread function! %d\n", v.sival_int);
- }
-
- int main()
- {
-
-
-
-
- timer_t timerid;
- struct sigevent evp;
- memset(&evp, 0, sizeof(struct sigevent));
-
- evp.sigev_value.sival_int = 111;
- evp.sigev_notify = SIGEV_THREAD;
- evp.sigev_notify_function = timer_thread;
-
- if (timer_create(CLOCKID, &evp, &timerid) == -1)
- {
- perror("fail to timer_create");
- exit(-1);
- }
-
-
-
-
-
-
-
-
- struct itimerspec it;
- it.it_interval.tv_sec = 1;
- it.it_interval.tv_nsec = 0;
- it.it_value.tv_sec = 1;
- it.it_value.tv_nsec = 0;
-
- if (timer_settime(timerid, 0, &it, NULL) == -1)
- {
- perror("fail to timer_settime");
- exit(-1);
- }
-
- pause();
-
- return 0;
- }
-
-
-
-
-
程序2:通知方式为信号的处理方式
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <string.h>
- #include <unistd.h>
-
- #define CLOCKID CLOCK_REALTIME
-
- void sig_handler(int signo)
- {
- printf("timer_signal function! %d\n", signo);
- }
-
- int main()
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- timer_t timerid;
- struct sigevent evp;
-
- struct sigaction act;
- memset(&act, 0, sizeof(act));
- act.sa_handler = sig_handler;
- act.sa_flags = 0;
-
-
-
-
- sigemptyset(&act.sa_mask);
-
- if (sigaction(SIGUSR1, &act, NULL) == -1)
- {
- perror("fail to sigaction");
- exit(-1);
- }
-
- memset(&evp, 0, sizeof(struct sigevent));
- evp.sigev_signo = SIGUSR1;
- evp.sigev_notify = SIGEV_SIGNAL;
- if (timer_create(CLOCK_REALTIME, &evp, &timerid) == -1)
- {
- perror("fail to timer_create");
- exit(-1);
- }
-
- struct itimerspec it;
- it.it_interval.tv_sec = 2;
- it.it_interval.tv_nsec = 0;
- it.it_value.tv_sec = 1;
- it.it_value.tv_nsec = 0;
- if (timer_settime(timerid, 0, &it, 0) == -1)
- {
- perror("fail to timer_settime");
- exit(-1);
- }
-
- pause();
-
- return 0;
- }
- struct itimerspec it;
- it.it_interval.tv_sec = 2;
- it.it_interval.tv_nsec = 0;
- it.it_value.tv_sec = 1;
- it.it_value.tv_nsec = 0;
这里的意思就是定时器一秒钟以后启动,每2s执行一次! 转载地址:http://ffzoi.baihongyu.com/