Qt线程与依赖注入一起使用的预期用途是什么?

时间:2016-05-03 11:56:38

标签: multithreading qt dependency-injection

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

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

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

  1. 子类的所有方法都通过返回值向上传递消息,并让主(例如G​​UI)对象处理所有发送。

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

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

    有没有“正式”的方式来做这件事,因为Qt的创造者想要它?

1 个答案:

答案 0 :(得分:2)

这没有神奇的银弹。您需要考虑许多因素,例如:

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