multithreading - Qt 线程与依赖注入(inject)结合的预期用途是什么?

标签 multithreading qt dependency-injection

让我们有一个可以从各种对象访问的工作线程。该工作对象有一些公共(public)槽,因此任何将其信号连接到工作槽的人都可以使用 emit 来触发工作线程的有用任务。

这个工作线程需要几乎是全局的,因为有几个不同的类使用它,其中一些位于层次结构的深处(主应用程序的子级的子级的子级)。

我想有两种主要方法可以做到这一点:

  1. 子类的所有方法都通过其返回值将消息向上传递到层次结构,并让主(例如 GUI)对象处理所有发出的消息。

  2. 所有需要工作线程服务的类都有一个指向 Worker 对象(它是主类的成员)的指针,并且它们都 connect() 到它在他们的构造函数中。然后,每个这样的类都会自行发射。基本上,依赖注入(inject)。

选项 2. 对我来说似乎更加干净和灵活,我只是担心它会创建大量连接。例如,如果我有一个需要线程的对象数组,我将为数组的每个元素都有一个单独的连接。

是否有一种“官方”方式可以做到这一点,正如 Qt 的创建者所希望的那样?

最佳答案

对此没有 Elixir 。您需要考虑许多因素,例如:

  • 为什么这些对象首先发出数据?是不是因为他们需要做某事,即发射是一个“命令”?然后也许他们可以调用某种服务来完成这项工作,甚至不用担心它是否会在另一个线程中发生。或者是因为他们通报了某个事件?在这种情况下,它们可能应该只发出信号而不连接它们。由使用代码来决定如何处理事件。
  • 我们正在讨论多少个对象?需要进行一些性能测试。也许这根本不是问题。
  • 如果有一个对象数组,它有什么作用?也许不需要使用普通数组,而是需要某种“容器”类?然后容器可以处理发射和连接,对象可以执行类似 container()->handle(data) 的操作。那么每个容器就只有一个连接。

关于multithreading - Qt 线程与依赖注入(inject)结合的预期用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37003495/

相关文章:

typescript - 以角度 6 将参数从组件发送到服务构造函数

android - 请使用覆盖选项或检查定义,koin android?

java - Guice:如何注入(inject)接口(interface)默认实现的实例?

java - 保持子线程运行

objective-c - 如何突然停止当前在后台执行的线程?

没有互斥量的条件等待

c++ - 从 C++ 向 QML 公开串口名称

linux - pthread_exit() 和初始线程

c++ - QPixmap::grabWindow 应用程序卡住后

c++ - 错误 : undefined reference to typeinfo while implementing interface pattern in C++