std::promise 在实时上下文中

std::promise in realtime context

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

在实时上下文中执行的线程之一从邮箱(具有实时功能)中取出 Task 消息对象。这些 Task 消息包含一个 std::promise 和一个 command.

线程获取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() );
      }
    }
  }
}

如果有人感兴趣:

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

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