gpt4 book ai didi

c++ - 实现线程监控机制所需的帮助

转载 作者:搜寻专家 更新时间:2023-10-31 01:57:15 31 4
gpt4 key购买 nike

我正在开发多线程中间件环境。该框架基本上是一个捕获和流式传输框架。所以它涉及到多个线程。

给大家简单介绍一下线程架构:demultiplexerreceiveVideoDecodeVideoDisplayVideo 等都有单独的线程。每个线程执行其功能,例如:
解复用器提取音频、视频数据包
receivevideo 接收视频包的头部+有效负载并移除有效负载
DecodeVideo 接收负载并解码负载数据包
DisplayVideo 接收解码包并在显示器上显示解码包

因此每个线程将提取的数据提供给下一个线程。线程在它们之间共享数据缓冲区,并且缓冲区通过使用互斥锁和信号量来同步。同样,还有其他线程用于处理 anlogvideoanalogaudio 等。

所有线程都在初始化期间产生,但它们仍然阻塞在信号量上,并且根据输入(模拟/数字)选择性信号量发出信号,以便特定线程得到解锁并继续执行他们的工作。在各个阶段,每个线程调用一些较低级别(驱动程序调用)来获取数据或写入数据等。这些调用是阻塞的,并且应该处理这些调用(驱动程序返回损坏的数据,驱动程序停止)导致的错误,但目前没有处理.

我想实现一个线程监控机制,其中一个线程将监控这些工作线程,如果发生错误情况将采取一些预防措施。据我了解,某些此类机制通常用于 UI 或 MMI 应用程序中的看门狗。我正在寻找类似的东西。

我正在使用 pthreads 并且没有 Boost 或 STL(它是遗留代码,几乎是过程 C++)

关于特定框架或设计模式或开源项目的任何想法都可以做类似的事情并且可能有助于实现我的要求的想法?

最佳答案

您能否对线程执行 ping 操作 - 定期向每个线程发送其常用输入队列中的消息,与所有其他正常内容交错,要求它返回其状态?当每个处理程序线程收到消息时,它会加载带有状态信息的消息 - 自上次 ping 以来处理了多少消息,其输入/输出队列的长度,其驱动程序上次返回 OK 的时间,诸如此类的统计信息 - 并将其排队回到你的线程监控机制。如果某些线程被卡住,您的 TMM 将不得不暂停回复。

您可以,也许,只在整个链中发布一条消息,每个线程在不同的字段中添加自己的状态。这意味着只有一次超时,之后您的 TMM 将不得不检查该消息以查看它在链条中到底走了多远。

还有其他一些事情——我喜欢在屏幕上以 1 秒的计时器进行转储,显示队列的长度和缓冲池的深度。如果有什么东西塞满了,我通常可以大致说出它在哪里(例如,一个池正在清空,一些队列正在增长 - 队列 comsumer 被浪费了)。

Rgds,马丁

关于c++ - 实现线程监控机制所需的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882184/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com