MinGW上的localtime_r支持
localtime_r support on MinGW
我正在处理一个Win32多线程C++项目,我想使用localtime_*
线程安全替代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/等)。
编辑:这是我的MinGW安装提供的<time.h>
:http://pastebin.com/0CYBfMzg
MinGW支持localtime_r吗?
没有。
如果没有,是否存在线程安全的替代方案?(不包括我不能使用的boost/QT/etc)
mingw将在windows上使用本机localtime函数,这是线程安全的。(但它不是可重入的,所以要小心)。
我的快速解决方案:
#include <time.h>
#if defined(_MSC_VER)
# define localtime_r(T,Tm) (localtime_s(Tm,T) ? NULL : Tm)
#endif
(受MinGW代码启发,搜索_POSIX_THREAD_SAFE_FUNCTIONS
。)
尝试使用函数localtime
而不是localtime_r
:
time_t t;
struct tm *timeinfo;
time(&t);
timeinfo = localtime(&t);
printf ("%s", asctime(timeinfo));
相关文章:
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 哪个C++规范开始支持 std::vector
- 如何检测VS C++编译器是否支持C++11?
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 将 IPv6 支持添加到雨量计
- 为什么C++不支持对未初始化变量进行智能分析?
- LMDB 是否支持随机读取?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错