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
是从应用程序进入实时上下文之前分配的内存块进行的杂乱分配。
我正在开发具有实时上下文的应用程序。
在实时上下文中执行的线程之一从邮箱(具有实时功能)中取出 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
是从应用程序进入实时上下文之前分配的内存块进行的杂乱分配。