C++ boost::posix_time::ptime存储在Windows共享内存映射中是否安全?
我想在Windows共享内存映射中为多个进程存储一个C++ boost::posix_time::ptime存储在Windows共享内存映射中是否安全?,c++,boost,boost-date-time,C++,Boost,Boost Date Time,我想在Windows共享内存映射中为多个进程存储一个boost::posix_time::ptime对象 但是,为了安全起见,ptime不能有指向内存中其他位置的指针(即,它需要是一个POD),否则访问内存映射的各个进程将遇到问题,因为ptime对象的一部分属于另一个进程 那么,存储在Windows共享内存映射中的ptime安全吗?我最终将boost的ptime转换为基于Unix时代的微秒,如下所示: #define MICROSECONDS_PER_SECOND 1000000 boost::
boost::posix_time::ptime
对象
但是,为了安全起见,ptime
不能有指向内存中其他位置的指针(即,它需要是一个POD),否则访问内存映射的各个进程将遇到问题,因为ptime
对象的一部分属于另一个进程
那么,存储在Windows共享内存映射中的
ptime
安全吗?我最终将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\u per\u second()
。对于我来说,微秒的精度已经足够了。我最终将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\u per\u second()
。对于我的情况来说,微秒是足够精确的。不管当前的实现,文档中什么都没有保证,所以在即将发布的Boost版本中没有什么保证是一样的……考虑将您需要的PDT复制到您自己的POD结构中,然后将其推送到共享内存中。文档中没有任何保证,所以在即将发布的Boost版本中,没有什么保证是一样的。考虑将您需要的PDT复制到您自己的POD结构中,然后将其推送到共享内存中。