2011-07-05 58 views
0

问题大多是OOP设计问题。 我有一个类处理与硬件的连接和通信(假设通过USB) - CommClass。它有几种方法 - connect(),disconnect(),read(),write()。 应用程序本身有很少其他类想要通过CommClass与同一硬件进行通信。 问题 - 你通常如何做到这一点? 我心里有一些想法:C++应用程序和硬件通信

  1. 在父类或在CommClass主要创建实例,调用connect()和PAS一个指向所有类(构造函数)。最后 - disconnect()
  2. 每个类的每个方法将在需要时在堆栈中创建一个CommClass对象。 - 这里的问题是,它必须调用connect()方法,以请求的句柄,USB等等,每次...
  3. 使用来自CommClass静态方法...
+0

你解答了你自己的问题。有几个模块共享一些CommClass,而不是在它们之间共享一个普通变量,没有什么不同。最好的方法可能会将其作为指向所有使用它的模块的指针。 – Lundin

+0

正如你所提到的伦丁你已经回答。如果您对答案不满意,请在此处分享您的问题陈述,并同时再次访问问题。找出缺少的东西。类diagaram或设计总是基于问题陈述。如果问题陈述不清楚,那么没有人可以给出好的设计。 – Kamahire

回答

0

如果您希望有一个单一的连接到设备(假设一个USB设备),那么如果你想有一个更优雅的设计,并使用由你的CommClass实现的接口来工作,那么有一个单一的实例CommClassICommClass是有意义的。您也可以将连接(类或接口)包装到singleton中,这样您就可以确保连接仅进行一次。如果您希望在单个线程应用程序中一次使用单个连接,则此功能效果最佳。在多线程或多连接环境中,您可以尝试使用object pool设计模式。

+0

感谢您的链接。这就是我一直在寻找的 - 一些设计模式。现在我必须选择合适的工作。 – nchokoev

0

我认为最好的解决方案很大程度上取决于您的应用程序的要求和通信连接的性质。在最简单的情况下,你在(1)中描述的内容可能就足够了。

就我个人而言,我几乎总是把通信放到一个单独的线程中。这有点复杂,但它可以带来显着的速度优势,并确保您的用户界面在通信发生异常时不会无响应(如USB电缆被拔出)

我最常使用的设计(RS232通信)对您在(1)中描述的内容略有差异。我有一个CComms类作为我的主应用程序对象的成员,它创建了一个线程来运行通信。然后我有一个非常简单的消息系统,类似于Windows使用的一个处理所有线程同步在通信线程之间传递数据的消息系统和主要应用程序。主应用程序然后有几个简单的功能来发送来自其他类的通信消息并将响应发送回相关的类。

我希望有一点帮助...

+0

我是这样开始的。该线程有点复杂的解决方案,但我喜欢它。我可能会再试一次。如何处理硬件响应延迟并且用户不断请求的情况(点击示例中的read()按钮)。这会产生很多事件... – nchokoev

+0

我在处理消息队列之前先检查消息队列,然后再添加新消息。如果队列中已经有相同ID /类型的消息,我就放弃它。延迟的硬件响应正好是使用单独的线程进行通信的情况,这是一个好主意 - 没有它,用户将无法多次单击该按钮,因为UI将被锁定。我同意这是一个更复杂的解决方案,但我认为从长远来看这是值得的。 – Redeye

相关问题