c++ - 在 GStreamer 管道总线上调用 gst_bus_set_sync_handler 是否安全?
问题描述
为了从我的 GStreamer 管道中获取所有总线消息,我目前正在调用gst_bus_set_sync_handler
(GST_BUS_DROP
从我的处理程序返回)。据我所知,这似乎完美无缺,但文档指出:
此函数通常仅由总线的创建者调用。应用程序应该使用 gst_bus watch 和 poll 函数异步处理消息。
我应该担心吗?我假设“总线的创建者”与管道的创建者(我)不同,或者是吗?
解决方案
关于使用gst_bus_set_sync_handler
.
首先,由于它在发布消息的同一线程中同步运行您的代码,因此只要您的回调运行,您就会阻止该线程执行其他工作。如果您在处理消息时做了大量工作,这可能会导致性能问题。
其次,您可能无法可靠地gst_element_set_state
在同步消息处理程序中使用,因为不允许元素在其流线程中设置自己的状态。这是否是一个问题将取决于管道中的哪个流线程发送了消息,这在异步消息处理程序中通常不必担心。
我建议尽可能使用异步消息传递,因为它有更少的警告。另一方面,如果gst_bus_set_sync_handler
对你有用,使用它应该不是问题。
推荐阅读
- java - 如果值不同,Java Map 将拒绝 put
- android - 导入 kotlinx.android.synthetic 失败:Android Studio 没有找到它,但我可以运行该应用程序
- python - 根据另一列中的条件选择两列中的值(Python)
- java - 如何让计数器在此代码中工作?
- django - Django+React:对从 React 到 Django 后端的 API 请求正确实施身份验证和安全性的最佳方法是什么
- arrays - 您将如何在 Julia 中使用 map() 创建对现有组合类型数组的修改?
- node-opcua - 一个订阅中的多个变量
- cmd - 我无法对程序文件使用 where 命令
- r - 修改一行数据以获得漂亮的输出(摘要),重塑 - 将行拆分为新的多列
- java - 缓冲阅读器抛出异常