我有一个Delphi 2006应用程序,用于收集数据并将其显示为多个通道的摘要,每个通道在TDrawGrid上一个通道。我有同样的应用程序运行在网络上的各种其他PC上,但这些其他PC是从属 - 他们不收集数据,但仅提供远程显示摘要。在PC之间共享Delphi中的公共内存区域
目前,奴隶只显示主人的总结显示屏幕的模仿,这是通过从主人的邮筒广播实施。
我希望以不同的方式实现此目的,以减少主站的负载,并为从站提供更多的灵活性和独立性来解释数据。另外,我在跨子网的数据的邮筒广播方面遇到问题。
我可以使用一些共享内存方案将数据放置到内存映射文件中,从站可以从任何地方访问(通过Web,甚至是)?我们正在讨论最大100k字节的内存大小,比如说,由主人每秒大约更新一次,可能在一个线程中,以保持主前台任务响应。
标准的Windows文件访问机制会不会妨碍脏读?偶尔奴隶将无法获得数据,但这不会是真正的问题。肮脏的阅读无关紧要,因为无论如何它们将在下一次主人轮询中被替换。据推测,在主设备上读取和写入磁盘缓存意味着对文件的大部分访问将是读取或写入内存呢? – rossmcm 2010-10-01 21:09:24
@ user89691:这取决于文件如何打开以及是否使用任何锁定机制。最简单的方法是让主设备打开文件写/允许读取和从设备只读/允许读/写。但是,这将允许脏读。其他打开的标志可以防止脏读,但双方都必须处理访问被拒绝的错误。 – dummzeuch 2010-10-02 09:34:35
究竟是什么脏读?你是说如果主人正在更新文件“写/允许读取”并且从服务器读取它的过程中,从服务器可能获得一半旧数据和一半新数据?我认为操作系统至少把记录写入原子。如果没有,那么一个足够的锁定机制是将文件打开为“写入/拒绝读取”,更新数据,关闭文件(并使从机应对其获取数据的时间)? – rossmcm 2010-10-02 13:30:23