【发布时间】:2012-01-03 14:48:12
【问题描述】:
我需要每秒调用一个函数,因为我想基于每秒存储数据,所以我不能错过第二个? C中最好的方法是什么?
下面是timer_create方法的骨架,这个够靠谱吗?
#include <stdio.h>
#include <time.h>
#include <signal.h>
timer_t gTimerid;
void start_timer(void)
{
struct itimerspec value;
value.it_value.tv_sec = 1;
value.it_value.tv_nsec = 0;
value.it_interval.tv_sec = 1;
value.it_interval.tv_nsec = 0;
timer_create (CLOCK_REALTIME, NULL, &gTimerid);
timer_settime (gTimerid, 0, &value, NULL);
}
void stop_timer(void)
{
struct itimerspec value;
value.it_value.tv_sec = 0;
value.it_value.tv_nsec = 0;
value.it_interval.tv_sec = 0;
value.it_interval.tv_nsec = 0;
timer_settime (gTimerid, 0, &value, NULL);
}
void timer_callback(int sig)
{
printf(" Catched timer signal: %d ... !!\n", sig);
}
int main(int ac, char **av)
{
(void) signal(SIGALRM, timer_callback);
start_timer();
while(1);
}
【问题讨论】:
-
fork 标签的链接是什么?
-
不可能准确地每 1 秒调用一次函数。即使您的 CPU 时钟从铯原子钟获得脉冲(即使原子钟也有公差,尽管非常小),也没有什么能阻止大型操作系统(例如 Linux、Windows、Mac)抢占您程序的线程。你愿意允许多大的容忍度?或者您是否考虑过不依赖于如此严格的公差的策略?
-
您需要一个特定于平台的计时器。那么,您需要哪个平台?
-
将您之前的一些问题标记为已回答。