实时上下文中的std :: promise

时间:2018-01-18 09:55:20

标签: c++11 promise c++14 real-time

我正在开发一个具有实时上下文的应用程序。

在实时上下文中执行的一个线程将Task邮件对象从邮箱中取消(具有实时功能)。这些Task条消息包含std::promisecommand

线程获得Task后执行命令,之后将调用std::promise::set_value()

因此,我担心调用std::promise::set_value()可能没有实时功能。

有人知道set::value()是否在内部分配堆存储,还是做了其他会破坏实时功能的东西?

这是一些希望让我的问题更清晰的小贴士:

void RealTimeThread::exec()
{
  while( active_ ) {
    Task receivedTask;

    if( mailbox_.getMailTimed( receivedTask, std::chrono::milliseconds( 100 ) ) ) {
      try {
        if( receivedTask.cmd ) {
          receivedTask.cmd->execute();
        } else {
          // TODO: some internal actions on timeout
          throw std::runtime_error{"Command invalid"};
        }

        // does the following call has real-time capabilities?
        receivedTask.cmdPromise.set_value();
      } catch( ... ) {
        receivedTask.cmdPromise.set_exception( std::current_exception() );
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

如果有人感兴趣:

一个 std::promise 可以构造给一个分配器。这用于分配在 std::future 对象上使用的“共享状态”。

如果您可以提供实时(确定性)分配的 allocator,则可以在这种情况下使用 std::promise。 这样的 allocator 是从应用程序进入实时上下文之前分配的内存块中进行杂乱分配。