我想在一个Windows共享内存映射中存储一个boost::posix_time::ptime
对象,用于多个进程。
但是,为了安全起见,ptime
不能指向内存中的其他位置(即它需要是POD),否则访问内存映射的各种进程将遇到问题,因为ptime
对象归另一个进程所有。
因此ptime
可以安全地存储在Windows共享内存映射中吗?
答案 0 :(得分:1)
我最终将boost 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()
。就我而言,微秒足够精确。