0

我有一个用于设备控制的 8 位数字输出板。每个外部设备都需要一位,并由不同的应用程序控制。我编写了一个类库和类 DigitalOutputPort (VB 2010),它封装了管理 8 位端口的驱动程序。每个设备应用程序都使用这个类,创建自己的实例。

为了设置数字输出端口的位,我必须向该端口写入一个字节:该字节是所有 8 位的位掩码:要将位号 0 - 1 - 2 设置为 HIGH,我必须写端口上的 7,要将所有 8 位设置为 HIGH,我必须写 256,依此类推...

当只有一个应用程序使用该类时,一切正常。但是如果两个应用程序想在那个端口上设置自己的位,我会遇到问题,因为我不知道其他应用程序设置的所有位的当前值(驱动程序没有这样的功能),当然,我不能改变一个位不改变所有其他(如果我不知道当前的位掩码)

通常这看起来像是两个应用程序之间共享数据的典型案例,我的第一个想法是将端口的当前值写入磁盘上的文件中,所有应用程序都可以访问和读取它。但是对于这个简单的问题来说似乎太重了。此外,它还可能产生性能和可靠性问题。

然后我想在课堂上使用共享字段(属性)。共享字段在类的所有实例之间保留其值:但在来自不同应用程序的实例之间也是如此吗?我找不到有关最后一点的更多信息,我必须进行相同的测试。

第三种方法是我只创建一个 DigitalOutputPort 类的实例,一个用于所有应用程序。第一个需要它的应用程序创建对象,所有其他应用程序将使用已经创建的对象。我比其他方式更喜欢这种方式,但我不知道是否以及如何做到这一点。

在您看来,哪种方法应该是正确的?

谢谢你的回复。

4

1 回答 1

1

两个不同的应用程序将始终具有不同且独立的内存。因此,即使是 Shared 字段也不相同。Shared 字段仅在特定应用程序及其内存的上下文中共享,而不是在系统上全局共享。

因此,您需要在两个应用程序之间共享数据。有几个选项,但最简单和最简单的是您提到的那个 - 将其存储在磁盘上的文件中。这并不过分,因为它是一个非常简单的实现。请记住不要锁定文件,因为需要多个进程来访问它。

您提出的另一种可能性是使用 DigitalOutputPort 的共享实例。这意味着让第一个应用程序创建实例,并通过 WCF/Remoting/其他一些跨进程通信方法公开它,以便其他应用程序可以访问它。这当然是可能的(尽管一旦所有这些应用程序都关闭,DigitalOutputPort 的状态就会丢失),但它要复杂得多,尤其是如果您还没有使用这些通信框架。

我会坚持使用磁盘上的文件,或者可能是注册表项,来存储应用程序之间共享的持久数据。

于 2012-02-13T09:16:53.783 回答