我正在开发一个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_r
:http://pastebin.com/0CYBfMzg
答案 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));