MinGW上的localtime_r支持

时间:2013-08-31 18:20:10

标签: c++ windows mingw

我正在开发一个Win32多线程C ++项目,我想使用localtime_*的{​​{1}}线程安全替代方案之一。

不幸的是我必须使用MinGW编译器,并且localtime()不能在Microsoft之外使用。

问题是localtime_s都不起作用:相关的代码段是

localtime_r

这是编译器输出:

#include <ctime>

...

string getCurrentTime()
{
    time_t t;
    time(&t);
    struct tm timeinfo;
    //localtime_s(&timeinfo, &t);
    localtime_r(&t, &timeinfo);

    char buf[128]; 
    strftime(buf, 128, "%d-%m-%Y %X", &timeinfo);

    return string(buf);
}

...

MinGW是否支持error: 'localtime_r' was not declared in this scope

如果没有,确实存在线程安全的替代方案吗? (不包括我不能使用的提升/ QT /等)。


编辑:这是我的MinGW安装提供的localtime_rhttp://pastebin.com/0CYBfMzg

3 个答案:

答案 0 :(得分:7)

  

MinGW是否支持localtime_r?

没有

  

如果没有,确实存在线程安全的替代方案吗? (不包括我无法使用的提升/ QT /等)

mingw将在Windows上使用本机localtime函数,这是线程安全的。 (但它不是可重入的,所以要注意这一点)。

答案 1 :(得分:0)

我的快速解决方案:

#include <time.h>
#if defined(_MSC_VER)
#   define localtime_r(T,Tm) (localtime_s(Tm,T) ? NULL : Tm)
#endif

(受 MinGW 代码启发,搜索 _POSIX_THREAD_SAFE_FUNCTIONS。)

答案 2 :(得分:-2)

尝试使用功能localtime代替localtime_r

time_t t;
struct tm *timeinfo;
time(&t);
timeinfo = localtime(&t);
printf ("%s", asctime(timeinfo));