3

ANSI C 时间函数不是线程安全的:特别是gmtime,ctimestrftime. 据我所知,唯一的线程安全函数是time.

如果我在 Visual Studio 中是对的,那么这个函数都是线程安全的。我正在使用 MinGW 编译器(带有 dwarf-2 的 4.8.0,由 Qt 5.1.0 提供)。

gmtime_r如何实现,ctime_r和的线程安全功能strftime_r?还是有一个更线程安全的库?

我使用 C++11 作为默认语言。

编辑 1
我在 windows xp 上使用 MinGW 4.8.0 (posix, dwarf-2)。

编辑 2
我正在考虑使用 Boost.DateTime 可能是一个不错的选择吗?

我对 c++11 缺乏时间管理感到非常失望!

4

2 回答 2

2

实际上应该有gmtime_rctime_rpthread.h但由于错误(http://sourceforge.net/p/mingw/bugs/1625/),它们被暂时删除。

你有几个选择

  1. 等到修好
  2. 使用旧版本的 MiniGW
  3. 为所有这些函数创建一个可重入包装器,lock_guard就像在这里safe_increment所做的那样
  4. 也许最好的方法是使用chronoC++11 添加的函数形式的头文件
于 2013-09-27T10:19:15.227 回答
0

MinGW arleady 提供了 gmtime_r 和 gmtime_s 函数,但它们在std命名空间中被注意。

于 2013-09-27T13:17:13.167 回答