localtime与localtime_r

来源:互联网 发布:软件配置管理人员职责 编辑:程序博客网 时间:2024/04/30 12:27

原文:http://www.cnblogs.com/li-hao/archive/2013/03/16/2963371.html


localtime与localtime_r

在写代码的时候,经常会用到读取系统时间的函数。很多人都会调用localtime函数来将时间转换本地时间,但是大家往往会忽略了一点,localtime函数不是线程安全的。如果在多线程里调用localtime函数,很可能会出现问题。

struct tm *localtime(const time_t *clock);

这个函数在返回的时候,返回的是一个指针,实际的内存是localtime内部通过static申请的静态内存,所以通过localtime调用后的返回值不及时使用的话,很有可能被其他线程localtime调用所覆盖掉

    多线程应用里面,应该用localtime_r函数替代localtime函数,因为localtime_r是线程安全的。

struct tm* localtime_r( const time_t* timer, struct tm* result );

struct tm tblock;
localtime_r(&nInTime, &tblock);
tblock.tm_hour = 0;
tblock.tm_min = 0;
tblock.tm_sec = 0;

struct tm tblockNew;
localtime_r(&nInTimeNew, &tblockNew);
tblockNew.tm_hour = 0;
tblockNew.tm_min = 0;
tblockNew.tm_sec = 0;
time_t timeold = mktime(&tblock);
time_t timeNew = mktime(&tblockNew);

if(timeold == timeNew) 
printf("同一天");
else if(timeNew>timeold)
printf("新的一天");
else
printf("过去一天");

0 0