2013-06-20 33 views
0

我想通过定时器计数器来控制应用程序的执行时间。 我看到time.h完成这项工作。循环时间控制的长度 - C

#include <time.h> 

#define SIZE 256 
void main(){ 
     time_t curtime,endtime; 
     struct tm *loctime, *etime; 
     char buffer[SIZE]; 

     //TIME 
     curtime = time(NULL); 
     endtime = curtime + 2*60; 
     loctime = localtime (&curtime); 
     etime = localtime (&endtime); 
     strftime (buffer, SIZE, "The time is %S \n", loctime); 
     fputs (buffer, stdout); 
     strftime (buffer, SIZE, "The time is %S.\n", etime); 
     fputs (buffer, stdout); 
} 

为什么我得到的开始和结束时间是相同的。

+0

但是我将结束时间增加了120秒。 – pistal

+0

你没有做任何事情来控制执行的时间长度 - 没有睡眠等...... – John3136

+0

但是递增应该至少给出经过时间的差异,对吧? – pistal

回答

2

从手册页localtime():返回值指向一个静态分配的结构,可能会被随后调用任何日期和时间函数覆盖。

你有两个选择,

  1. 第一次调用localtime()后,返回值复制到另一个局部变量,并调用它第二次。
  2. 改为使用localtime_r()(首选)

手册页的localtime and localtime_r

+0

它说功能'太少的参数'localtime_r' – pistal

+0

链接手册页包含'本地时间_r'函数原型是'结构tm * localtime_r(const time_t * timep,结构tm *结果);'。所以发送有效的'struct tm'的地址作为第二个参数。示例:http://publib.boulder.ibm.com/infocenter/iadthelp/v7r5/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst156.htm – VoidPointer

+0

time_t curtime,endtime; struct tm * loctime,* etime,newtime; loctime = localtime(&curtime); etime = localtime_r(&endtime,&newtime); 我现在正确吗? – pistal

0

您应该使用localtime_r而不是localtime来获得两个不同的时间。

man localtime

返回值指向可能的后续调用任何的日期和时间函数 覆盖静态分配结构。 localtime_r()函数的作用相同,但将数据存储在用户提供的 结构中。