问题描述
ANSI C时间函数不是线程安全的:尤其是gmtime
,ctime
和strftime
.据我所知,唯一的线程安全功能是time
.
ANSI C time function are not thread safe: in particular gmtime
, ctime
and strftime
. For what I know the only thread-safe function is time
.
如果我对Visual Studio正确,那么此函数都是线程安全的.我正在使用MinGW编译器(带有dwarf-2的4.8.0,由Qt 5.1.0提供的那个).
If I'm right in Visual Studio this function are all thread safe. I'm using MinGW compiler (4.8.0 with dwarf-2, that one provided by Qt 5.1.0 ).
如何补充gmtime_r
,ctime_r
和strftime_r
的线程安全功能?还是有一个更线程安全的库?
How can inplement thread safe function of gmtime_r
, ctime_r
and strftime_r
? Or is there a more thread-safe library for that?
我使用C ++ 11作为默认语言.
I'm using C++11 as default language.
修改1
我在Windows XP上使用的是MinGW 4.8.0(posix,dwarf-2).
edit 1
I'm using MinGW 4.8.0 (posix, dwarf-2) on windows xp.
修改2
我正在考虑使用Boost.DateTime,这可能是个不错的选择吗?
edit 2
I'm considering to use Boost.DateTime may it be a good choice?
我对缺少c ++ 11的时间管理感到非常失望!
I'm very disappointed for the lack on c++11 of time managment!
推荐答案
在pthread.h
中实际上应该有gmtime_r
和ctime_r
,但是由于存在错误,它们被临时删除了( http://sourceforge.net/p/mingw/bugs/1625/).
There actually should be gmtime_r
and ctime_r
in pthread.h
but they are temporary removed because of a bug (http://sourceforge.net/p/mingw/bugs/1625/).
您别无选择
- 等待,直到将其修复
- 使用旧版的MiniGW
- 使用
lock_guard
为所有这些功能创建可重入包装,就像safe_increment
完成这里 - 也许最好的方法是使用C ++ 11添加的
chrono
头文件形式的函数
- Wait until it will be fixed
- Use older version of MiniGW
- Make a reentrant wrapper for all of those functions using
lock_guard
just likesafe_increment
has done here - And maybe best way is to use functions form
chrono
header file added by C++11
这篇关于实现线程安全的ctime函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!