当前位置: 技术问答>linux和unix
如何让一个循环运行一个固定时间?
来源: 互联网 发布时间:2016-11-17
本文导语: 本帖最后由 HEHE8737 于 2011-03-29 21:31:08 编辑 我想让下面这个while循环运行10秒,该怎样设置定时器呢?刚开始考虑了在while循环里用select函数,可是select阻塞到最大时间到了才执行下一条语句,不是我想要的。请大家指...
#include
#include
#include
#include
main()
{
FILE *fd;
int i=0;
while(1)
{
fd=fopen("exam","w+");
fprintf(fd,"%dn",i);
printf("i=%dn",i);
i++;
}
close(fd);
}
|
#define XXX 10 //定义时间
int main(int argc, char **argv)
{
time_t a;
time_t b;
time(&a);
while(1)
{
time(&b);
if(b > a + XXX)
break;
/*
自己的代码
*/
}
int main(int argc, char **argv)
{
time_t a;
time_t b;
time(&a);
while(1)
{
time(&b);
if(b > a + XXX)
break;
/*
自己的代码
*/
}
|
使用alarm可以实现啊,用一个全局变量tag初始化为0,然后在ALRM信号处理函数中将tag = 1,然后循环中增加如下代码, 比如:
这样只是粗略实现,不知道能不能满足楼主的要求
while(1)
{
fd=fopen("exam","w+");
fprintf(fd,"%dn",i);
printf("i=%dn",i);
i++;
if(tag == 1) // +
break; // +
}
这样只是粗略实现,不知道能不能满足楼主的要求
|
不一定非要定时器啊
在循环之前获取一下当前的系统时间
没此循环都再获取一次,减去之前获取的时间,得到秒差应该可以吧
根据秒差来决定是否执行下一次循环
精度要求不高,循环中或去当前时间可以不用这么平凡,比如每10(随便)个循环判断一次
在循环之前获取一下当前的系统时间
没此循环都再获取一次,减去之前获取的时间,得到秒差应该可以吧
根据秒差来决定是否执行下一次循环
精度要求不高,循环中或去当前时间可以不用这么平凡,比如每10(随便)个循环判断一次
|
首先,循环运行固定的时间烧CPU,没有任何意义。
其次,循环运行的时间也不可能是固定的。
其次,循环运行的时间也不可能是固定的。
|
难道我想对模拟信号连续采样10分钟的想法该怎么实现呢?crtl+c终止程序的话,fopen打开的文件不能保存
看着楼主这句话,不太明白楼主到底想实现什么
看着楼主这句话,不太明白楼主到底想实现什么
|
不知道sleep(sec)或是usleep(usec)合不合用?
|
如果数据量不大的情况下,可能缓冲区没满,这样终止程序后,文件中没有数据
如果数据量很大,已经填满缓冲区,那么缓冲区的数据会写入文件
可以把文件设置为无缓冲或行缓冲
|
那你写一次数据,就flush下
|
到秒级就读系统时间即可, 只要你循环一圈在1s内
select不能定时吧, 他是等一个超时时间, 检测到 东西 有变化就跳出, 而这个东西比如串口等数据, 等到就是东西, 你这里没有可以变化的东西
select不能定时吧, 他是等一个超时时间, 检测到 东西 有变化就跳出, 而这个东西比如串口等数据, 等到就是东西, 你这里没有可以变化的东西
|
边写,边fflush一下应该可以吧
|
伪代码
while (1)
{
int t1 = time();
// ...
int t2 = time();
delay(10 - (t2 - t1));
}