【问题标题】:Is boost::posix_time::ptime safe to store in a Windows shared memory map?boost::posix_time::ptime 是否可以安全地存储在 Windows 共享内存映射中?
【发布时间】:2012-01-04 21:10:06
【问题描述】:

我想在 Windows 共享内存映射中为多个进程存储一个 boost::posix_time::ptime 对象。

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

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

【问题讨论】:

  • 无论当前的实现是什么,文档中没有任何保证,因此在即将推出的 Boost 版本中没有任何保证是相同的......
  • 考虑将 ptime 中所需的内容复制到您自己的 POD 结构中,然后将其推送到共享内存中。

标签: c++ boost boost-date-time


【解决方案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()。对于我来说,微秒就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 2012-11-26
    • 2012-10-09
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多