您的位置:首页 > 理论基础 > 计算机网络

K&R TCPL 附录B中<time.h>中的函数的相关

2013-07-16 18:49 621 查看
codeblock / vs2010中 clock_t 和 time_t 的大小为4

①clock_t clock(void)

clock函数返回程序开始执行后占用的处理器时间。如果无法获取获取处理器时间,则返回值为-1。clock() / CLOCKS_PER_SEC是以秒为单位表示的时间。

#include <stdio.h>
#include <time.h>

int delay(int ms)
{
int start;
start = clock();
while(clock() - start < ms)
;
return ms;
}

int main(int argc, char *argv[])
{
clock_t start = 0;
clock_t end = 0;
long int loop = 10579001L;

delay(300);
printf("现在自程序开始运行了「 %d 」毫秒喵~\n", clock());

printf("程序作「 %ld 」次自减运算运算所耗时间为", loop);
start = clock();
while(loop--)
;
end = clock();
printf("「 %d 」毫秒,即「 %f 」秒喵~\n", end - start, (double)(end - start) / CLOCKS_PER_SEC);

return 0;
}


②time_t time(time_t *tp)

time函数返回当前日历时间。如果无法获取日历事件,则返回值为-1。如果tp不是NULL,则同时将返回值赋给tp。

#define _USE_32BIT_TIME_T
#include <stdio.h>
#include <time.h>

int delay(int ms)
{
int start;
start = clock();
while(clock() - start < ms)
;
return ms;
}

int main(int argc, char *argv[])
{
time_t a = 12510;
time_t now = 0;

printf("time_t型变量a的初始值是「%d」\n",a);
now = time(&a);
printf("time_t型变量now的被改写成了「%d」,同时a也被改写成了「%d」\n", now, a);

delay(2500);
now = time(0);
printf("now在2500毫秒后被改写成了「%d」,但是由于time()的参数tp是NULL,a依然保持2500毫秒前的值「%d」\n", now, a);
return 0;
}

在vs2010中运行发现无法储存在tp中,与msdn描述不符,令人费解,参见:http://msdn.microsoft.com/en-US/library/1f4c8f33%28v=VS.80%29.aspx

后来终于被证实是由于后续版本库中time_t是64位的,因此普通的long格式打印没打出来。因此需要对_USE_32BIT_TIME_T进行宏定义。否则就需要打印__int64型变量了。

在codepad codeblocks pellesc中均正常。

到底这个数是1900还是1970后经过的秒数,似乎与实现有关,但暂没空研究标准了

③double difftime(time_t time2, time_t time1)

difftime函数返回time2-time1的值(以秒为单位)。

如果参数反了会返回负数。在实现上,由于time2 time1是无符号的,需要判断大小分别处理。(具体参见库的实现)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: