15.6.2. 非阻塞调用
注意:由于OSX不支持必要的POSIX实时特性,因此在OSX上该功能并未完全支持。在这种情况下,该功能受到
std::timed_mutex
和std::condition_variable_any
实现的限制。
Fast DDS API中的某些函数在资源控制竞争时可能会被阻塞一段不确定的时间。被阻塞的函数无法继续执行,直到获得控制权的操作完成,从而导致调用线程被阻塞。
实时应用程序需要可预测的行为,包括从函数调用到返回控制的最大时间可预测性。为了遵循这一限制,可以配置Fast DDS以限制这些函数的最大阻塞时间。如果超过了阻塞时间限制,则请求的操作将被中止,并终止该函数,将控制权返回给调用者。
该配置需要两个步骤:
- 在应用程序编译期间设置CMake选项
-DSTRICT_REALTIME=ON
。 - 配置函数的最大阻塞时间。
Fast RTPS非阻塞API
方法 | 配置属性 | 默认值 |
---|---|---|
DataWriter::write() | reliability().max_blocking_time on DataWriterQos | 100毫秒 |
DataReader::take_next_sample() | reliability().max_blocking_time on DataReaderQos | 100毫秒 |
DataReader::read_next_sample() | reliability().max_blocking_time on DataReaderQos | 100毫秒 |
DataReader::wait_for_unread_message() | 此方法接受一个参数,指定最大阻塞时间 | - |
以上表格总结了与Fast RTPS相关的方法及其默认的最大阻塞时间配置。通过适当配置这些参数,可以确保在实时应用中获得更好的性能表现。
内容由零声教学AI助手提供,问题来源于学员提问