C++根据strftime需要定义时间格式化函数,这需要struct tm"分解时间"记录.但是,C和C++ 03语言没有提供线程安全的方法来获取这样的记录; struct tm整个计划只有一位大师.
在C++ 03中,这或多或少都可以,因为该语言不支持多线程; 它只支持支持多线程的平台,然后提供像POSIX这样的设施localtime_r.
C++ 11还确定了新的时间公用事业,与非破旧的接口time_t类型,这是什么会被用来重新初始化全局struct tm.但获得一个time_t不是问题.
我错过了什么或者这项任务是否还需要依赖POSIX?
编辑:这是一些解决方法代码.它保持与::localtime_r提供仅提供的单线程环境的多线程环境的兼容性std::localtime.它可以很容易地适应检查其它功能,如posix::localtime_r或::localtime_s或什么都有,你.
namespace query {
char localtime_r( ... );
struct has_localtime_r
{ enum { value = sizeof localtime_r( std::declval< std::time_t * >(), std::declval< std::tm * >() )
== sizeof( std::tm * ) }; };
template< bool available > struct safest_localtime {
static std::tm *call( std::time_t …Run Code Online (Sandbox Code Playgroud)