嵌入式 秒数转换为时间格式Locatime以及gmtime不可以重入

这篇博客探讨了嵌入式系统中localtime函数的线程安全问题,指出localtime()不可重入,推荐使用localtime_r()作为替代。文章通过实例展示了localtime和localtime_r的区别,强调了在多线程环境下使用localtime_r()的重要性,同时提到了Boost库中的c_time作为跨平台线程安全的解决方案。
摘要由CSDN通过智能技术生成

/*localtime 不可以重入*/

#include <stdlib.h>

#include <sttring.h>

#include <time.h>  
#include <stdio.h>  
  
  
int main(int argc, char *argv[])  
{  
    time_t tNow =time(NULL);  
    time_t tEnd = tNow + 1800;  
    //注意下面两行的区别  
    struct tm* ptm = localtime(&tNow);  
    struct tm* ptmEnd = localtime(&tEnd);  
  
    char szTmp[50] = {0};  
    strftime(szTmp,50,"%H:%M:%S",ptm);  
    char szEnd[50] = {0};  
    strftime(szEnd,50,"%H:%M:%S",ptmEnd);  
      
  
    printf("%s /n",szTmp);  
    printf("%s /n",szEnd);  
      
  
    system("PAUSE");  
    return EXIT_SUCCESS;  

}  


最后出来的结果是:

21:18:39

21:18:39

/*可重入函数*/

#include <stdlib.h>  
#include <string.h>  
#include <time.h>  
#include <stdio.h>  
 
int main(int argc, char *argv[])  
{  
    time_t tNow =time(NULL);  
    time_t tEnd = tNow + 1800;  
  
    //在这里修改程序  
    //struct tm* ptm = localtime(&tNow);  
    //struct tm* ptmEnd = localtime(&tEnd);  
    struct tm ptm = { 0 };  
    struct tm ptmEnd = { 0 };  
    localtime_r(&tNow, &ptm);  
    localtime_r(&tEnd, &ptmEnd);  

      
    char szTmp[50] = {0};  
    strftime(szTmp,50,"%H:%M:%S",&ptm);  
    char szEnd[50] = {0};  
    strftime(szEnd,50,"%H:%M:%S",&ptmEnd);  
    printf("%s /n",szTmp);  
    printf("%s /n",szEnd);  
      
  
    system("PAUSE");  
    return EXIT_SUCCESS;  
}  


此外:

跨平台的线程安全的localtime和gmtime


localtime()返回一个内部静态变量指针,是线程不安全的。
localtime_r()是线程安全的版本,可是Windows上没有。

boost::date_time::c_time为localtime和gmtime这些ctime函数提供了一个统一的版本.
定义为c_time中的2个静态成员函数。

头文件:c_time.hpp
命名空间:boost::date_time

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值