如何每5秒往文本写一次

yaohua1211 2011-10-18 10:52:15
假如我在收一些数据,这些数据是不停变化的,现在我想每隔5秒钟将数据存在一个txt里,文件操作写入文件存已经搞定,现在想问怎么样来5秒写到文本存一次,目前我的构架是这样的

function()
{
for(满足了才能运行){
file *fp;
char *filename = "XXXX";
fp = fopen(filename,"w");

//写到文本,每行按这个格式
fprintf(fp,"%x,%x,%x,%x,%x,%x,%x,%x\n",x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x);

//这里是一大堆必不可少的东西
}
fclose(fp);
}

这个只有每次重启程序,才能真正fclose吧,只要允许一直在运行,写入文本的东西回一行一行累积,我想能不能现在每秒往txt里写一次,txt文件名不用变,但内容5秒更新一次,我可以往外读

...全文
415 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony2278 2011-10-19
  • 打赏
  • 举报
回复
用定时器~
zhaopeng2511 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dayu1988 的回复:]
引用 7 楼 zhaopeng2511 的回复:
如果精度要求不是很高的话,可以用下面的代码实现……

C/C++ code
#include <stdio.h>
#include<time.h>
main()
{
time_t start_time,end_time;
time(&amp;start_time);
do
{
time(&amp;end_ti……
[/Quote]

那你就用sleep最简单了……,那也是要使用CPU的,最直接的方法是用汇编根据自己机子的时钟周期来计时,设置一个计数中断……当计数溢出时延时完成……
  • 打赏
  • 举报
回复
用定时器哇
AndyZhang 2011-10-19
  • 打赏
  • 举报
回复
获取系统时间,然后计算差值
dayu1988 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhaopeng2511 的回复:]
如果精度要求不是很高的话,可以用下面的代码实现……

C/C++ code
#include <stdio.h>
#include<time.h>
main()
{
time_t start_time,end_time;
time(&start_time);
do
{
time(&end_time);
}whi……
[/Quote]
有没有更好的办法,因为5秒钟之内一直在执行
do
{
time(&end_time);
}whi……

而这个好像不需要那么频繁,而浪费cpu
赵4老师 2011-10-19
  • 打赏
  • 举报
回复
#include <windows.h>
#include <stdio.h>
#include <share.h>

fp = _fsopen(filename,"w",_SH_DENYWR);

//写到文本,每行按这个格式
fprintf(fp,"%x,%x,%x,%x,%x,%x,%x,%x\n",x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x);
fflush(fp);
Sleep(5000);
//这里是一大堆必不可少的东西
}
fclose(fp);

yel617 2011-10-19
  • 打赏
  • 举报
回复
记号,干活拉,晚上了写个看看
[Quote=引用 10 楼 pathuang68 的回复:]

最原始的方法,用两个线程,一个用于接收数据,一个用于计时(sleep),时间一到就写数据。

如果在不同的操作系统平台,可以用平台提供的定时器,比如Windows的SetTimer这个api
[/Quote]
ljhhh0123 2011-10-19
  • 打赏
  • 举报
回复
怎么不行?
你用我的程序输入命令行prog >> out.txt
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char *argv[])
{
while(1){
printf("1,");
fflush(NULL);
Sleep(3000);
}
return 0;
}
yaohua1211 2011-10-19
  • 打赏
  • 举报
回复
工作忙,先谢谢楼上所有,我试过sleep放在写数据前面,但是txt就写不出来数据
想通过时间函数time来取时间做判断,但是不知道条件怎么写。。
zombiehao 2011-10-19
  • 打赏
  • 举报
回复
最简单的开个线程


while(1)
{
sleep(5000);

操作文本

}
ljhhh0123 2011-10-19
  • 打赏
  • 举报
回复
用sleep()函数最简单.
zhaopeng2511 2011-10-19
  • 打赏
  • 举报
回复
再来一段,在VC下可以精确到千分之一秒,在TC下能精确到18.2分之一秒……
#include<stdio.h> 
#include<time.h>
main()
{
clock_t goal,wait;
wait=(clock_t)5*CLK_TCK;
goal=wait+clock();
while(goal>clock());
printf("\nThe programme has delay 5 seconds!\n");
}
pathuang68 2011-10-19
  • 打赏
  • 举报
回复
最原始的方法,用两个线程,一个用于接收数据,一个用于计时(sleep),时间一到就写数据。

如果在不同的操作系统平台,可以用平台提供的定时器,比如Windows的SetTimer这个api
jcback 2011-10-18
  • 打赏
  • 举报
回复
alarm(5);捕捉到SIGALRM自己写个函数处理下不就好了
modicum_lf 2011-10-18
  • 打赏
  • 举报
回复

楼上的都不错 !

zhaopeng2511 2011-10-18
  • 打赏
  • 举报
回复
如果精度要求不是很高的话,可以用下面的代码实现……
#include <stdio.h> 
#include<time.h>
main()
{
time_t start_time,end_time;
time(&start_time);
do
{
time(&end_time);
}while(difftime(end_time,start_time)<5.00);
printf("\The programme has delay 5 seconds!");
}
动感超哥 2011-10-18
  • 打赏
  • 举报
回复
unix好像有个中断alarm(秒) 倒数到0 就会产生一个中断信号 好像是14信号 用signal来处理 太久没有用了 记不太清了 不知道LZ 是不是这个、。、、、
live_for_you 2011-10-18
  • 打赏
  • 举报
回复
linux下可以用的,最好还是用线程好一些,互不干扰
yaohua1211 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 live_for_you 的回复:]

/*定时器*/
static void set_timer()

{

struct itimerval itv,oldtv;

itv.it_interval.tv_sec = 5;

itv.it_interval.tv_usec = 0;

itv.it_value.tv_sec = 5;

itv.it_value.tv_usec = 0;

s……
[/Quote]

我是linux环境,settimer是vc的吧,貌似
就是如果直接用循环while可以写么?我写了半天都没弄对
live_for_you 2011-10-18
  • 打赏
  • 举报
回复
/*定时器*/
static void set_timer()

{

struct itimerval itv,oldtv;

itv.it_interval.tv_sec = 5;

itv.it_interval.tv_usec = 0;

itv.it_value.tv_sec = 5;

itv.it_value.tv_usec = 0;

setitimer(ITIMER_REAL, &itv, &oldtv);

}
/*初始化*/
int init()
{
signal(SIGALRM, write);

set_timer();

return 0;
}
设置一个计时器,每5s抛出一个信号量,signal受到信号量执行write线程,
加载更多回复(2)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧