我想在多个进程的Windows共享内存映射中存储boost::posix_time::ptime
对象。
然而,为了安全起见,ptime
不能有指向内存中其他位置的指针(即它需要是POD),否则访问内存映射的各个进程将遇到问题,因为ptime
对象的部分由另一个进程拥有。
所以ptime
安全存储在Windows共享内存映射?
我最终将boost的ptime
基于Unix epoch转换为微秒,如下所示:
#define MICROSECONDS_PER_SECOND 1000000
boost::posix_time::ptime unixEpoch(boost::gregorian::date(1970, boost::gregorian::Jan, 1));
boost::posix_time::time_duration deltaTime = timestamp - unixEpoch;
boost::int64_t microsecondsAfterEpoch =
deltaTime.ticks() / (deltaTime.ticks_per_second() / MICROSECONDS_PER_SECOND);
我可以很容易地只使用deltaTime.ticks()
,但我也需要跟踪deltaTime.ticks_per_second()
。对于我来说,微秒就足够精确了。