我正在开发一个具有实时上下文的应用程序。
在实时上下文中执行的一个线程将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() );
}
}
}
}
答案 0 :(得分:1)
如果有人感兴趣:
一个 std::promise
可以构造给一个分配器。这用于分配在 std::future
对象上使用的“共享状态”。
如果您可以提供实时(确定性)分配的 allocator
,则可以在这种情况下使用 std::promise
。
这样的 allocator
是从应用程序进入实时上下文之前分配的内存块中进行杂乱分配。