gpt4 book ai didi

delphi - 进程间通信

转载 作者:行者123 更新时间:2023-12-03 14:36:49 25 4
gpt4 key购买 nike

我有两个应用程序:X 和 Y。
X 是主应用程序,它处理大量 XML 文件。它已经有十多年的历史了,已经使用了六种技术来存储、处理和处理这些 XML 文件。
Y 是我正在开发的一个调试工具,它可以以一种方式处理和显示 XML 文件。更易于人类阅读的形式。基本上,它只是有一个样式表集合,用于检测 XML 格式,如果它识别该格式,它会将 XML 转换为 HTML,并显示在 TWebBrowser 组件中。

问题:
当 Y 处于事件状态时,我希望 X 将其处理的任何 XML 发送给 Y 以用于显示目的。但只有当 Y 运行时!如果Y没有运行,X就不会做任何事情。
Y的检测需要随时进行,并且需要很快。我考虑过使用 TCP/IP 通信,但由于缺少 Y 导致的延迟太长。特别是因为有时要处理大量 XML。命名管道和类似的基于网络的解决方案也存在同样的问题。我需要快速确定 Y 是否正在运行且可用,如果是,则快速发送 XML,然后继续 X。
我还考虑过使 Y 成为基于 COM 的应用程序,或者添加一个基于 COM 的 DLL允许进程间通信的事件。 DLL 解决方案会很有趣,因为它会向 X 公开一个方法来上传 XML 文件,然后向 Y 发送一个事件来处理 XML。 这似乎是最好的选择,尽管我还需要检查 DLL 是否已注册。如果没有,那么 X 甚至无法调用它!
应用程序 X 也将由不会收到 Y 或附加 DLL 的客户使用,因此在大多数情况下,DLL 将不会被注册。 (正如我所说,它是为了在调试过程中提供帮助......)

但也许还有其他选择? TCP/IP 太慢,COM 有点太复杂。


X和Y将在同一系统上运行。或者系统上只有 X,而 Y 完全丢失。

<小时/>

关于使用内存映射文件...虽然实用,但我需要记住,大多数时候,Y 不会运行,因此 MMF 会浪费内存。 XML 数据在 X 中的大小可达 4 MB,因此在内存中拥有多个此大小的 block 有点过大了。它可用于在 X 和 Y 之间发送状态消息,但应用程序 X 的内存有时会出现一些问题。虽然 MMF 可以连接到物理文件,但我试图完全避免写入任何临时文件。< br/>这是一个很好的解决方案,但我担心还不够好。

<小时/>

我认为需要一些额外的解释。应用程序 X 是一个将使用几个小时的应用程序,用户执行大量操作,这些操作会转换为大量需要处理的 XML 数据。应用程序 X 是一个桌面应用程序,它与多个 Web 应用程序 (REST)、Web 服务 (SOAP) 和其他应用程序进行通信,其中大部分是通过 XML 进行的。
应用程序 Y 只是为了查看 X 正在运行的进程内部。基本上,X 工作了 20 分钟,Y 就会弹出。从那一刻起,X 应该开始向 Y 发送 XML,直到 Y 再次消失或直到 X 终止。在大多数情况下,Y 只会运行以捕获正在运行的任务的一小部分,并且它甚至可能启动多次。但我可能以错误的方向思考整件事。也许 X 应该是 Y 注册到的服务器...当 Y 找不到 X 时,这并不是一个真正的问题。但是 X 找不到 Y 不会导致延迟或其他问题...

最佳答案

查看我的 IPC:

http://www.cromis.net/blog/downloads/cromis-ipc/

它速度快、免费并且具有可设置的超时,因此您可以将其设置为非常小的量(例如 50 毫秒)。因为它非常快(典型的消息周期请求 -> 处理 -> 响应需要不到 1 毫秒,大约 0.1 毫秒),因此您可以有非常小的超时。它内置了客户端服务器,所以很多客户端都没有问题。它以线程方式运行,后面有任务池,因此不会卡住您的程序,并且它具有非常灵活的数据包,可以轻松写入/读取数据。

正如已经说过的,您甚至可以通过其他方式检查调试器是否正在运行。

  • 检查进程
  • 检查进程的主窗口
  • 使用互斥体
  • ...

关于delphi - 进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com