C ++应用程序和硬件通信

时间:2011-07-05 10:27:58

标签: c++ oop hardware communication

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

  1. 在父类或CommClass的主要创建实例中,调用connect()并传递指向所有类(构造函数)的指针。最后 - disconnect()
  2. 每个类中的每个方法都会在需要时在堆栈中创建一个CommClass对象。 - 这里的问题是它必须调用connect()方法以便每次都要求处理USB等等......
  3. 使用CommClass ...
  4. 中的静态方法

2 个答案:

答案 0 :(得分:0)

如果您希望与设备建立单一连接(假设是USB设备),那么如果您想拥有更多设备,则可以使用CommClassICommClass的单个实例优雅的设计和使用由CommClass实现的界面。您还可以将连接(类或接口)包装到singleton中,这样您就可以确保连接只进行一次。如果您希望在单线程应用程序中一次使用单个连接,则此方法效果最佳。在多线程或多连接环境中,您可以尝试使用object pool设计模式。

答案 1 :(得分:0)

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

就个人而言,我几乎总是将通信放入一个单独的线程中。它有点复杂,但它可以带来显着的速度优势,并确保当通信中发生奇怪的事情时(例如拔出USB线),您的UI不会没有响应。

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

我希望这有点帮助...