实现线程安全的ctime函数

3
ANSI C时间函数不是线程安全的:特别是gmtimectimestrftime。据我所知,唯一线程安全的函数是time
如果我没错,在Visual Studio中这些函数都是线程安全的。我使用MinGW编译器(4.8.0和dwarf-2,由Qt 5.1.0提供)。
如何实现线程安全函数gmtime_rctime_rstrftime_r?或者有没有更安全的库?
我使用C++11作为默认语言。 编辑1
我在Windows XP上使用MinGW 4.8.0(posix、dwarf-2)。 编辑2
我正在考虑使用Boost.DateTime,这是一个好选择吗?
我对C++11缺乏时间管理非常失望!

我猜测您没有可用的标准POSIX库,否则您已经拥有了ctime_r等功能。而且在C++11中,您可以使用std::chrono命名空间 - Some programmer dude
我正在Windows XP上使用MinGW。它没有提供这些功能...所以我必须自己实现它。 - Elvis Dukaj
2个回答

2

pthread.h应该有gmtime_rctime_r函数,但它们由于一个错误而被暂时移除 (http://sourceforge.net/p/mingw/bugs/1625/)。

你有几个选择:

  1. 等待修复此问题
  2. 使用旧版本的MiniGW
  3. 创建可重入包装器,对所有这些函数使用lock_guard,就像safe_increment所做的那样(这里)
  4. 最好的方法可能是使用C++11添加的chrono头文件中的函数

不幸的是,std::chrono 无法满足我的需求:我需要在给定 time_t 的情况下设置操作系统时间(在 Windows 和 Linux 中使用 SetSystemTimesettimeofdat)。旧版本的 MinGW 也没有帮助。我正在使用所有最新的 C++11 特性。 - Elvis Dukaj
我猜设置系统时间比锁定操作要昂贵得多,所以请尝试使用std::lock_guard。 - tomas789

0

MinGW 已经提供了 gmtime_r 和 gmtime_s 函数,但它们不在 std 命名空间中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接