您好我正在制作一个视频录制程序项目,用于录制和重放视频,以及显示延迟的实时视频,以及通过颜色跟踪放置。
该软件在Linux上运行,在4核心的odroid上运行,最初我开始使用多线程作为每个新类的一部分实现的线程。这些线程中的每一个都会处理自己的gui元素。
我后来发现我需要在main / gui线程中显示所有gui元素/视频。早些时候我使用过opencv和boost。但似乎使用Qt可能是一个更好的主意,因为一些代码已经依赖于QT库。我目前是编程新手,不熟悉opencv,qt或threading。
我的问题是: 这是一个相对健全的程序结构,还是我现在计划如何做到这一点本身就存在错误?
主要/ GUI线程
ButtonControl
亲切的问候,谢谢你花时间看我的问题。
TLDR - 是一个将线程实现为类的结构,并且将图像数据发送回gui / main线程,这是一种做多线程程序的好方法吗?
答案 0 :(得分:1)
在性能方面,最好的方法是根本不直接处理线程,而是使用QtConcurrent::run
。绘制QImages
是安全的,它只是通过信号传递给GUI对象进行显示。我写了a complete example来证明这种方法。由于相邻的代码相邻,它可以产生一些非常简洁和易于理解的代码。
如果你确实想要使用显式线程,那么不是从QThread
派生,而是简单地将各种工作者对象移动到它们的线程中,并让它们通过信号和插槽进行通信将会容易得多。我也有a complete example这种方法。