9

localtime_*我正在开发一个 Win32 多线程C++ 项目,我想使用localtime().

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

问题是两者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);
}

...

这是编译器输出:

error: 'localtime_r' was not declared in this scope

MinGW 支持localtime_r吗?

如果没有,是否存在线程安全的替代方案?(不包括我不能使用的 boost/QT/etc)。


编辑:这是<time.h>我的 MinGW 安装提供的:http: //pastebin.com/0CYBfMzg

4

3 回答 3

10

MinGW 是否支持 localtime_r ?

不。

如果没有,是否存在线程安全的替代方案?(不包括我不能使用的 boost/QT/etc)

mingw 将在 windows 上使用本地本地时间函数,这是线程安全的。(但它不是可重入的,所以要小心)。

于 2013-08-31T19:28:53.830 回答
3

我的快速解决方案:

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

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

于 2021-06-16T12:13:39.903 回答
-2

尝试使用该函数localtime而不是localtime_r

time_t t;
struct tm *timeinfo;
time(&t);
timeinfo = localtime(&t);
printf ("%s", asctime(timeinfo));
于 2013-08-31T20:20:08.203 回答