所有 GStremer 样本都通过以下某种形式初始化 GLib 主线程:
loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);
据我了解,这个主循环用于所有信号处理。总线消息也在其中处理。
所以我有点担心如果我同时运行多个管道会发生什么。或者其中一些存在问题/不正确的实现。
对于重负载,最好的解决方案很可能是将管道分离到多个进程,从而减轻内存泄漏、挂起、死锁等所有可能的问题,而不会影响主应用程序。
无论如何,至少将它们运行到单独的线程中是有益的。
显然,可以启动多个 GLib 主线程,首先创建 GMainContext。但我无法理解(显然我缺少知识)之后如何将它们“分配”给管道或向它们发出信号等。例如在“g_signal_connect”和“g_signal_emit”中没有指定哪个“主”线程是执行。
这里的一些帖子声称这是可能的(GStreamer 支持不同的主线程),但我无法找到详细信息。
在这个线程中讨论了类似的问题,但老实说我无法理解它。
在这篇StackOverflow 帖子中讨论了如何将超时附加到不同的 GLib 主线程。我想可以为 GStreamer 管道和对象制作类似的东西,但我不确定。
有人可以启发我一点吗?