2012-01-04 93 views
1

我想将一个boost::posix_time::ptime对象存储在Windows共享内存映射中以用于多个进程。boost :: posix_time :: ptime是否安全地存储在Windows共享内存映射中?

但是,为了安全起见,ptime不能有指向内存中其他地方的指针(即它必须是POD),否则访问内存映射的各种进程将遇到问题,因为对象的部分是由另一个进程拥有。

那么ptime安全地存储在Windows共享内存映射中?

+2

无论目前的实施情况如何,文档中没有任何事情可以保证,因此在即将到来的Boost版本中没有任何保证是相同的。 – ildjarn 2012-01-04 21:13:20

+1

考虑将您需要的ptime复制到您自己的POD结构中,然后将其推入共享内存。 – 2012-01-04 22:25:39

回答

1

我结束了转换升压转换器的ptime到基于截止于Unix纪元微秒,像这样:

#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()轨道。就我的情况而言,微秒足够精确。