Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::posix_time::ptime存储在Windows共享内存映射中是否安全?_C++_Boost_Boost Date Time - Fatal编程技术网

C++ boost::posix_time::ptime存储在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::

我想在Windows共享内存映射中为多个进程存储一个
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结构中,然后将其推送到共享内存中。