在MinGW下提升ptime不是线程安全的

时间:2011-10-28 07:42:00

标签: c++ boost mingw

我对boost库有问题。我正在使用MinGW和gcc 4.5.2来编译以下代码:

unsigned long GetEpochSeconds()
{
    using namespace boost::posix_time;
    using namespace boost::gregorian;

    ptime now(second_clock::universal_time());
    ptime epoch(date(1970,1,1));
    time_duration diff = now-epoch;
    return diff.total_seconds();
}

问题是此代码不是线程安全的。当我从多个线程中运行它时,我的应用程序崩溃了。现在我已经转换为c-standard函数,如time,mktime等,一切正常,但将来我需要一些提升时间函数。

我也在使用-D_REENTRANT编译,但这没有帮助。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

检查您的代码是否正在调用gmtime()或gmtime_r()(为此使用调试器)。请参阅http://www.boost.org/doc/libs/1_48_0/boost/date_time/c_time.hpp并注意必须定义BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS才能获得线程安全的时间。