Multithreading 对于多线程videocoacher程序来说,这是一种合适的结构吗?

Multithreading 对于多线程videocoacher程序来说,这是一种合适的结构吗?,multithreading,qt,opencv,structure,Multithreading,Qt,Opencv,Structure,您好,我目前正在为一个videocoacher项目工作,该项目用于录制和重放视频,以及显示延迟的实时视频,并通过颜色跟踪位置 该软件在linux上运行,在一个4核的odroid上,最初我开始使它成为多线程的,并将线程作为每个新类的一部分来实现。每个线程负责自己的gui元素 我后来发现我需要在main/gui线程中显示所有gui元素/视频。早些时候,我使用了opencv和boost。但是使用Qt似乎是一个更好的主意,因为有些代码已经依赖于Qt库。我目前是编程新手,对opencv、qt或线程都不太熟

您好,我目前正在为一个videocoacher项目工作,该项目用于录制和重放视频,以及显示延迟的实时视频,并通过颜色跟踪位置

该软件在linux上运行,在一个4核的odroid上,最初我开始使它成为多线程的,并将线程作为每个新类的一部分来实现。每个线程负责自己的gui元素

我后来发现我需要在main/gui线程中显示所有gui元素/视频。早些时候,我使用了opencv和boost。但是使用Qt似乎是一个更好的主意,因为有些代码已经依赖于Qt库。我目前是编程新手,对opencv、qt或线程都不太熟悉

我的问题是: 作为课程的一个结构,这是否相对合理,或者我现在计划的方式是否存在固有的问题?

Main/GUI线程

  • 将显示所有视觉和视频内容
  • 将为ButtonControl对象启动一个线程
按钮控制

  • 将处理所有按钮输入,控制程序中发生的事情
  • 根据按下的按钮,开始和结束线程 比如:
  • StoreToFile对象(开始将视频存储到文件中,同时发送 视频流到GUI线程(显示实时存储的内容)
  • ReadFromFile对象(读取当前存储的文件并发送数据 要在GUI线程中显示它
  • DelayedVideoStream对象(将视频存储到缓冲区,并显示 连续延迟查看过去发生的事情(5秒)
  • 颜色跟踪对象(跟踪图像中颜色放置的位置 )
向您致以亲切的问候,感谢您抽出时间来看我的问题


TLDR-是一种将线程实现为类并将图像数据发送回gui/主线程的结构,这是执行多线程程序的一种不错的方式?

从性能角度看,最好的方法根本不是直接处理线程,而是使用
QtConcurrent::run
。绘制
QImages
是安全的>它们只是通过信号传递给GUI对象来显示。我写了一篇文章来演示这种方法。由于相关代码相邻,它产生了一些非常简洁易懂的代码


如果您确实想使用显式线程,那么不从
QThread
派生会容易得多,而只需将各种工作对象移动到它们的线程中,并让它们通过信号和插槽进行通信。我也支持这种方法。

非常感谢您的回答和示例。我对这两种多线程都非常陌生ing、QT和opencv。我想我会按照你的建议使用QTConcurrent,因为正如你所说,这是最容易理解的。