我对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编译,但这没有帮助。
感谢您的任何建议。
答案 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才能获得线程安全的时间。